@import url(https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Inter:wght@400;500&display=swap);:root{--bg:#fbfaf7;--fg:#1d1d1b;--muted:#76746e;--rule:#e6e3dc;--accent:#8a3b12;--serif:"EB Garamond",Georgia,"Times New Roman",serif;--sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--text-title:1.15rem;--text-sub:0.9rem;--text-small:0.75rem;--text-meta:0.65rem}@media (prefers-color-scheme:dark){:root{--bg:#161614;--fg:#e8e6e1;--muted:#9a978f;--rule:#2c2b28;--accent:#e0956b}}*,:after,:before{box-sizing:border-box}html{font-size:19px;scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--serif);font-size:1rem;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px;transition:color .15s,text-decoration-color .15s}a:hover{color:var(--accent);text-decoration-color:var(--accent)}.page{max-width:640px;margin:0 auto;padding:96px 24px 64px}h1{font-weight:500;font-size:2rem;line-height:1.1;margin:0;letter-spacing:-.01em}.tagline{font-style:italic;color:var(--muted);margin:4px 0 24px}.bio{margin:0 0 16px}.entry-links,.profile-links,nav{display:flex;flex-wrap:wrap;gap:4px 18px;font-family:var(--sans);font-size:var(--text-meta);letter-spacing:.04em}.entry-links a,.profile-links a{color:var(--muted)}.entry-links a:hover,.profile-links a:hover{color:var(--accent)}nav{margin-top:48px;padding:14px 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);text-transform:uppercase;letter-spacing:.12em}nav a{text-decoration:none}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}.chip{font-family:var(--sans);font-size:var(--text-meta);letter-spacing:.04em;line-height:1;padding:7px 12px;border-radius:999px;border:1px solid var(--rule);background:transparent;color:var(--muted);cursor:pointer;transition:color .15s,background-color .15s,border-color .15s}.chip:hover{border-color:var(--accent);color:var(--accent)}.chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chip-selected{background:var(--fg);border-color:var(--fg);color:var(--bg)}.chip-selected:hover{background:var(--accent);border-color:var(--accent);color:var(--bg)}.theme-filter{margin-top:24px}.tech-filter{margin-top:12px}.filter-toggle{font-family:var(--sans);font-size:var(--text-meta);letter-spacing:.04em;padding:0;border:0;background:none;color:var(--muted);cursor:pointer}.filter-toggle:hover,.filter-toggle[aria-expanded=true]{color:var(--accent)}.filter-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tech-chips,.theme-chips{margin-top:10px}.library-chips{margin-top:14px}.library-chips .chips{margin-top:6px}.error{font-size:var(--text-small);white-space:pre-wrap;color:var(--accent)}.empty{color:var(--muted);font-style:italic}section{margin-top:64px;scroll-margin-top:32px}h2{font-family:var(--sans);font-weight:500;font-size:var(--text-meta);text-transform:uppercase;letter-spacing:.14em;color:var(--muted);margin:0}.section-head{margin:-12px 0 12px;padding:12px 0;position:sticky;top:0;z-index:1;background:var(--bg)}.entries{list-style:none;margin:0;padding:0}.entry{margin-bottom:32px}.entry-sub,.entry p{margin:2px 0}.entry-sub p{margin:0}.entry-head{display:flex;justify-content:space-between;align-items:baseline;gap:16px}.entry-title{font-weight:500;font-size:var(--text-title);line-height:1.3}.entry-year{font-family:var(--sans);font-size:var(--text-meta);color:var(--muted);font-variant-numeric:tabular-nums;flex-shrink:0}.entry-sub{display:flex;justify-content:space-between;align-items:baseline;gap:16px}.entry-location{margin-left:auto;font-family:var(--sans);font-size:var(--text-meta);flex-shrink:0}.authors,.entry-location{color:var(--muted)}.authors .me{color:var(--fg);font-weight:500}.authors,.summary,.venue{font-size:var(--text-sub);line-height:1.35}.summary,.venue{font-style:italic}a.entry-title{text-decoration-color:var(--accent)}.website{font-family:var(--sans);font-size:var(--text-small)}.website a{color:var(--accent);text-decoration:none}.website a:hover{text-decoration:underline}.entry-links{margin-top:6px}.expand{font:inherit;letter-spacing:inherit;padding:0;border:0;background:none;color:var(--muted);cursor:pointer}.expand:hover{color:var(--accent)}.expand:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.details{margin-top:12px;padding-left:14px;border-left:2px solid var(--rule)}.details .description{margin:0 0 10px}.tag-row{margin-top:10px}.tag-label{display:block;font-family:var(--sans);font-size:var(--text-meta);text-transform:uppercase;letter-spacing:.12em;color:var(--muted);margin-bottom:4px}.tags{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.tag{letter-spacing:.04em;line-height:1;padding:5px 10px;border-radius:999px;border:1px solid var(--rule);color:var(--fg)}.tag,footer{font-family:var(--sans);font-size:var(--text-meta)}footer{margin-top:96px;padding-top:16px;border-top:1px solid var(--rule);color:var(--muted)}@media (max-width:520px){html{font-size:17px}.page{padding:56px 16px 48px}}@media print{:root{--bg:#fff;--fg:#000;--muted:#444;--rule:#ccc;--accent:#000}@page{margin:16mm 18mm}html{font-size:11pt}.page{max-width:none;padding:0}.details,.expand,.tech-filter,.theme-filter,nav{display:none}section{margin-top:28px}.section-head{position:static;margin:0 0 8px;padding:0;break-after:avoid}.entry{margin-bottom:16px;break-inside:avoid}footer{display:none}}.exchange{--exchange-fg:var(--fg,#1d1d1b);--exchange-muted:var(--muted,#76746e);--exchange-rule:var(--rule,#e6e3dc);--exchange-accent:var(--accent,#8a3b12);--exchange-sans:var(--sans,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif);--exchange-meta:var(--text-meta,0.65rem);--exchange-hover:color-mix(in srgb,var(--exchange-accent) 7%,transparent);--exchange-highlight:color-mix(in srgb,var(--exchange-accent) 16%,transparent)}.page.exchange-page:has(.exchange-both){max-width:1240px}.exchange-page .back{margin-top:0;margin-bottom:32px}.exchange-page:before{content:"";position:fixed;top:0;left:0;right:0;height:12px;background:var(--bg,#fbfaf7);z-index:2}.exchange-controls{display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px}.exchange-tabs{display:flex;flex-wrap:wrap;gap:8px}.exchange-tab{font-family:var(--exchange-sans);font-size:var(--exchange-meta);letter-spacing:.04em;line-height:1;padding:7px 12px;border-radius:999px;border:1px solid var(--exchange-rule);background:transparent;color:var(--exchange-muted);cursor:pointer;transition:color .15s,background-color .15s,border-color .15s}.exchange-tab:hover{border-color:var(--exchange-accent);color:var(--exchange-accent)}.exchange-tab:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:2px}.exchange-tab-on,.exchange-tab-on:hover{background:var(--exchange-fg);border-color:var(--exchange-fg);color:var(--bg,#fbfaf7)}.exchange-tab:disabled,.exchange-tab:disabled:hover{cursor:default;opacity:.4}.exchange-tab:disabled:not(.exchange-tab-on):hover{border-color:var(--exchange-rule);color:var(--exchange-muted)}.exchange-summary{color:var(--exchange-muted)}.exchange-summary,.exchange-warnings{font-family:var(--exchange-sans);font-size:var(--exchange-meta);letter-spacing:.04em;margin:16px 0 0}.exchange-warnings{color:var(--exchange-accent)}.exchange-warnings summary{cursor:pointer;width:fit-content}.exchange-warnings summary:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:2px}.exchange-warnings ul{margin:6px 0 0;padding-left:18px;color:var(--exchange-muted)}.exchange-columns{margin-top:32px}.exchange-both .exchange-columns{display:grid;grid-template-columns:1fr 1fr;gap:56px}.exchange-bindings .exchange-text{height:calc(100vh - 240px);min-height:320px;overflow-y:auto;padding-right:12px}.exchange-bindings .exchange-text:before{content:"";display:block;position:sticky;top:0;height:12px;margin-bottom:-12px;background:var(--bg,#fbfaf7);z-index:2}.exchange-text .exchange-side{font-family:var(--exchange-sans);font-weight:500;font-size:var(--exchange-meta);letter-spacing:.14em;text-transform:uppercase;line-height:1.6;color:var(--exchange-muted);margin:0 0 12px;padding:12px 0;position:sticky;top:0;z-index:2;background:var(--bg,#fbfaf7)}.exchange-section>:is(h1,h2,h3,h4,h5,h6):first-child{position:sticky;top:calc(24px + var(--exchange-meta)*1.6);z-index:1;background:var(--bg,#fbfaf7);padding-bottom:6px;margin-bottom:calc(.5em - 6px)}.exchange-section>:is(h1,h2,h3,h4,h5,h6):first-child:before{content:"";position:absolute;left:0;right:0;bottom:100%;height:12px;background:inherit}.exchange-body h1,.exchange-body h2,.exchange-body h3,.exchange-body h4,.exchange-body h5,.exchange-body h6{border:0;font-family:inherit;text-transform:none;letter-spacing:normal;color:var(--exchange-fg);font-weight:500;line-height:1.2;margin:1.4em 0 .5em}.exchange-body h1{font-size:1.7rem;margin-top:0}.exchange-body h2{font-size:1.3rem}.exchange-body h3{font-size:1.1rem}.exchange-body h4,.exchange-body h5,.exchange-body h6{font-size:1rem}.exchange-body blockquote,.exchange-body ol,.exchange-body p,.exchange-body pre,.exchange-body table,.exchange-body ul{margin:0 0 .9em}.exchange-body blockquote{border-left:2px solid var(--exchange-rule);padding-left:16px;color:var(--exchange-muted);font-style:italic}.exchange-body code{font-size:.85em}.exchange-body pre{overflow-x:auto;padding:12px;border:1px solid var(--exchange-rule);border-radius:4px}.exchange-body table{border-collapse:collapse;font-size:.9rem}.exchange-body td,.exchange-body th{border-bottom:1px solid var(--exchange-rule);padding:4px 12px 4px 0;text-align:left;vertical-align:top}.exchange-body hr{border:0;border-top:1px solid var(--exchange-rule);margin:1.5em 0}.exchange-body img{max-width:100%}.part-bound{cursor:pointer;border-radius:3px;transition:background-color .15s}.part-block.part-bound{border-left:2px solid var(--exchange-rule);padding:2px 0 2px 12px;margin:0 0 .9em}.part-block.part-bound>:last-child{margin-bottom:0}.part-inline.part-bound{border-bottom:1px solid var(--exchange-rule);padding:0 2px;-webkit-box-decoration-break:clone;box-decoration-break:clone}.part-block.part-unanswered{border-left-style:dashed}.part-inline.part-unanswered{border-bottom-style:dashed}.part-bound:hover{background:var(--exchange-hover)}.part-bound:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:2px}.part-related,.part-related:hover,.part-selected,.part-selected:hover{background:var(--exchange-highlight);border-color:var(--exchange-accent)}.part-tag{font-family:var(--exchange-sans);font-size:var(--exchange-meta);font-style:normal;letter-spacing:.04em;color:var(--exchange-accent)}.part-block.part-bound>.part-tag{display:block;margin-bottom:2px}.part-inline.part-bound>.part-tag{margin-right:4px}.versions-block{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:start;margin:0 0 .9em}.versions-text>:last-child{margin-bottom:0}.versions-toggle{font-family:var(--exchange-sans);font-size:1rem;line-height:1;padding:2px;border:0;border-radius:999px;background:none;color:var(--exchange-accent);cursor:pointer}.versions-block>.versions-toggle{margin-top:.3em}.versions-inline.versions-paragraph{display:block;margin:.9em 0}.versions-end{white-space:nowrap}.versions-block.versions-bare{grid-template-columns:auto;justify-items:start}.versions-block.versions-bare>.versions-toggle{margin-top:0}.versions-toggle:hover{background:var(--exchange-hover)}.versions-toggle:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:1px}.exchange-close,.exchange-info-handle,.exchange-info-page{display:none}.exchange-close{flex:none;width:32px;height:32px;padding:0;border:0;border-radius:999px;background:none;color:var(--exchange-muted);font-family:var(--exchange-sans);font-size:1.4rem;line-height:1;cursor:pointer}.exchange-close:hover{color:var(--exchange-accent);background:var(--exchange-hover)}.exchange-close:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:1px}@media (max-width:820px){.exchange-both .exchange-columns{grid-template-columns:1fr;gap:32px}.exchange.exchange-bindings{position:fixed;inset:0;z-index:3;display:flex;flex-direction:column;padding:0 16px;background:var(--bg,#fbfaf7)}body:has(.exchange-bindings){overflow:hidden}.exchange-bindings .exchange-controls{display:none}.exchange-bindings .exchange-columns,.exchange-both.exchange-bindings .exchange-columns{flex:1;min-height:0;margin:0;display:flex;flex-direction:column;gap:0}.exchange-bindings .exchange-text{flex:1 1 0;height:auto;min-height:0;max-height:max-content;padding-right:0;overscroll-behavior:contain}.exchange-bindings .exchange-text+.exchange-text{border-top:1px solid var(--exchange-rule)}.exchange-info{position:absolute;top:0;left:0;right:0;z-index:4;display:flex;align-items:flex-start;gap:12px;padding:0 16px 14px;background:var(--bg,#fbfaf7);border-bottom:1px solid var(--exchange-rule);box-shadow:0 6px 16px -10px rgba(0,0,0,.25);transition:transform .25s ease,visibility 0s linear .25s;transform:translateY(-100%);visibility:hidden}.exchange-info-open{transform:none;visibility:visible;transition:transform .25s ease}.exchange-info-text{flex:1;min-width:0}.exchange-info-page{display:block}.exchange-info .exchange-summary,.exchange-info .exchange-warnings{margin-top:12px}.exchange-close{display:block;margin-top:6px}.exchange-info-handle{display:block;position:absolute;top:0;left:50%;z-index:3;transform:translateX(-50%);padding:0 18px 2px;border:1px solid var(--exchange-rule);border-top:0;border-radius:0 0 10px 10px;background:var(--bg,#fbfaf7);color:var(--exchange-muted);font-family:var(--exchange-sans);font-size:1rem;line-height:1;cursor:pointer}.exchange-info-handle:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:1px}}.gap{font-family:var(--exchange-sans);font-size:.9rem;line-height:1;padding:2px 8px;border:1px dashed var(--exchange-rule);border-radius:999px;background:none;color:var(--exchange-muted);cursor:pointer;vertical-align:middle}.gap:hover{color:var(--exchange-accent);border-color:var(--exchange-accent)}.gap:focus-visible{outline:2px solid var(--exchange-accent);outline-offset:1px}.gap-block{margin:0 0 .9em}.gap-item{list-style:none}.part-block>.part-tag:has(.part-not-addressed){display:flex;align-items:center;gap:12px}.part-not-addressed{display:inline-flex;align-items:center;gap:6px;margin-left:8px}.part-block>.part-tag>.part-not-addressed{margin-left:auto}.part-inline>.part-tag>.part-not-addressed{float:right;height:1.6rem;margin-left:12px}.part-alert{display:inline-block;min-width:1.3em;padding:0 3px;border-radius:999px;background:var(--exchange-accent);color:var(--bg,#fbfaf7);font-weight:600;text-align:center;line-height:1.3}.application-resume{margin-top:48px;padding-top:8px;border-top:1px solid var(--exchange-rule)}.application-resume:first-child{margin-top:0;padding-top:0;border-top:0}.application-resume .page>main:first-child>section:first-of-type{margin-top:0}.application-resume .page{max-width:none;margin:0;padding:0}.application-resume .entry.part-bound{margin-bottom:32px}.application-none{font-family:var(--exchange-sans);font-size:var(--exchange-meta);letter-spacing:.04em;color:var(--exchange-muted);margin:12px 0 0}.application-resume .section-part{margin:0}.application-resume .section-part>.section-head{margin-top:0}.application-resume .section-head>.part-tag{display:block;margin-bottom:4px}.application-resume .section-part.part-bound:hover>.section-head{background:linear-gradient(var(--exchange-hover),var(--exchange-hover)),var(--bg)}.application-resume .section-part.part-related>.section-head,.application-resume .section-part.part-selected>.section-head{background:linear-gradient(var(--exchange-highlight),var(--exchange-highlight)),var(--bg)}.application .exchange-controls{justify-content:flex-end}.page.application-page{padding-top:40px}.application-heading{margin:0 0 16px}.application-candidate{font-weight:500;font-size:2rem;line-height:1.1;letter-spacing:-.01em;margin:0}.application-job{font-style:italic;color:var(--muted);margin:4px 0 0}.application-sep{font-style:normal}.exchange-info .application-heading{margin:12px 0 0}.exchange-info .application-candidate{font-size:1.3rem}.exchange-info .application-job{font-size:.95rem;margin-top:2px}.application .exchange:not(.exchange-bindings){position:relative;display:flow-root}.application .exchange:not(.exchange-bindings)>.exchange-controls{position:absolute;inset:0;flex-direction:column;justify-content:flex-start;align-items:flex-end;gap:0;pointer-events:none}.application .exchange:not(.exchange-bindings)>.exchange-controls:before{content:"";flex:none;align-self:stretch;position:sticky;top:0;z-index:1;margin-top:32px;height:calc(24px + var(--exchange-meta)*1.6);background:var(--bg,#fbfaf7)}.application .exchange:not(.exchange-bindings)>.exchange-controls .exchange-tab{position:sticky;top:calc(4px + var(--exchange-meta)*0.3);z-index:3;margin-top:calc(-20px - var(--exchange-meta)*1.3);pointer-events:auto;background:var(--bg,#fbfaf7)}@media (min-width:821px){.page.application-page:has(.exchange-bindings){height:100vh;height:100dvh;display:flex;flex-direction:column;padding-bottom:24px}.application .exchange-bindings,.application:has(.exchange-bindings){flex:1;min-height:0;display:flex;flex-direction:column}.application .exchange-bindings .exchange-columns{flex:1;min-height:320px;grid-template-rows:minmax(0,1fr)}.application .exchange-bindings .exchange-text{height:auto;min-height:0}.application .exchange-bindings>.exchange-controls{display:none}.application .exchange-bindings .exchange-info{display:flex;align-items:center;gap:12px;margin-top:16px}.application .exchange-bindings .exchange-info-text{flex:1;min-width:0}.application .exchange-bindings .exchange-info .exchange-summary{margin-top:0}.application .exchange-bindings .exchange-close{display:block}}