:root{--bg: #000000;--fg: #e8e8e8;--fg-dim: #888888;--accent: #ffffff;--border: #222222;--font-mono: "Berkeley Mono", "IBM Plex Mono", "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font-size-base: 16px;--line-height: 1.6;--content-max-width: 72ch;--sidebar-width-collapsed: 3.5rem;--sidebar-width-expanded: 14rem;--transition: .15s ease}*{box-sizing:border-box}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--font-mono);font-size:var(--font-size-base);line-height:var(--line-height);min-height:100vh}.content h1,.content h2,.content h3,.content h4{font-weight:400;line-height:1.3;margin:0}.content h1{font-size:2rem;margin-bottom:.5rem}.content h2{font-size:1.4rem;margin-top:3rem;margin-bottom:1rem;padding-top:2rem;border-top:1px solid var(--border)}.content h3{font-size:1.1rem;margin-top:2rem;margin-bottom:.5rem}.content h4{font-size:1rem;margin-top:1.5rem;margin-bottom:.5rem}.content>section:first-of-type h2,.content>.page-heading+section h2,.content>article:first-of-type h1{border-top:none;padding-top:0;margin-top:0}.content p{margin:0 0 1rem}.content p:last-child{margin-bottom:0}.content a{color:var(--fg);text-decoration:underline;text-underline-offset:.2em;text-decoration-color:var(--fg-dim);text-decoration-thickness:1px;transition:text-decoration-color var(--transition)}.content a:hover,.content a:focus{text-decoration-color:var(--fg)}.content a:focus-visible{outline:1px solid var(--fg);outline-offset:2px}.content ul{list-style:none;padding:0;margin:0 0 1rem}.content ul li{position:relative;padding-left:1.5em;margin-bottom:.25rem}.content ul li:before{content:">";position:absolute;left:0;color:var(--fg-dim)}.content ul ul{margin-top:.25rem;margin-bottom:.5rem}.content ul ul li:before{content:">>"}.content .meta,.content .job__dates,.content .lead{color:var(--fg-dim);font-size:.95rem}.content .lead{margin-bottom:2rem}.content .meta{font-style:normal}.content h1 .meta,.content h2 .meta,.content h3 .meta{font-size:.7em;margin-left:.5em}.content .intro{margin-bottom:3rem}.content .intro h1{font-size:2.5rem}.content .intro .tagline{color:var(--fg-dim);font-size:1rem;margin:0}.content .job,.content .degree,.content .project{margin-bottom:2rem}.content .job__header h3,.content .degree h3,.content .project h3{margin-top:0;margin-bottom:.25rem}.content .job__role{color:var(--fg-dim);font-weight:400}.content .job__header .job__dates{margin-top:0;margin-bottom:.75rem}.content .skills{display:grid;grid-template-columns:max-content 1fr;gap:.5rem 2rem;margin:0}.content .skills dt{color:var(--fg-dim);white-space:nowrap}.content .skills dt:after{content:":";margin-left:.25em}.content .skills dd{margin:0}@media(max-width:480px){.content .skills{grid-template-columns:1fr;gap:.25rem 0}.content .skills dd{margin-bottom:1rem}}.content .page-heading{margin-bottom:2rem}.content .project-list .project-entry{margin-bottom:2rem;padding-bottom:2rem;border-bottom:1px solid var(--border)}.content .project-list .project-entry:last-child{border-bottom:none}.content .project-list .project-entry h2{border-top:none;padding-top:0;margin-top:0;margin-bottom:.25rem;font-size:1.25rem}.content .back-link{margin-bottom:2rem;color:var(--fg-dim);font-size:.95rem}.content .project-teaser{list-style:none;padding:0;margin:1rem 0}.content .project-teaser li{padding-left:0;margin-bottom:.5rem}.content .project-teaser li:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
