:root{color-scheme:light dark;--paper:#f8f6f1;--ink:#242c29;--muted:#626b64;--line:#d9ddd3;--accent:#a44428;--wash:#eeeee6;--code:#eaece4;--serif:Georgia,'Times New Roman',serif;--sans:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--mono:ui-monospace,SFMono-Regular,Consolas,monospace}
@media(prefers-color-scheme:dark){:root{--paper:#171c1a;--ink:#e7e7db;--muted:#a5afa6;--line:#39423a;--accent:#efaa86;--wash:#222a25;--code:#222a25}}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:2rem}body{margin:0;background:var(--paper);color:var(--ink);font:17px/1.75 var(--sans);-webkit-font-smoothing:antialiased}::selection{background:var(--accent);color:var(--paper)}a{color:var(--accent);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}h1,h2,h3,p,pre,figure{margin:0}h1,h2,h3{line-height:1.15;font-weight:400}h1,h2{font-family:var(--serif)}p+p{margin-top:1.2em}.shell{width:min(1040px,calc(100% - 64px));margin:auto}.skip{position:absolute;top:-100px;left:1rem;background:var(--paper);z-index:10;padding:.5rem}.skip:focus{top:0}.header{display:flex;justify-content:space-between;align-items:center;gap:2rem;padding:30px 0;border-bottom:1px solid var(--line)}.wordmark{color:var(--ink);font:600 17px var(--mono);text-decoration:none}.wordmark span{color:var(--accent)}nav{display:flex;gap:27px;align-items:center}nav a{font-size:14px;color:var(--muted);text-decoration:none}nav a:hover,nav a[aria-current=page]{color:var(--accent)}.hero{display:grid;grid-template-columns:1.1fr 1fr;gap:65px;padding:76px 0 66px;align-items:center}.eyebrow,.section-label,.meta{font:12px/1.6 var(--mono);letter-spacing:.07em;color:var(--muted)}.eyebrow,.section-label{text-transform:uppercase}.eyebrow{display:flex;align-items:center;gap:10px;margin-bottom:22px}.dot{width:7px;height:7px;border-radius:50%;background:#6b8062}.hero h1{font-size:clamp(48px,6.4vw,80px);letter-spacing:-.055em}.hero h1 em{font-weight:400;color:var(--accent)}.hero-bio{padding-top:26px;font-size:18px;line-height:1.8}.hero-bio p+p{margin-top:16px}.small-links{display:flex;flex-wrap:wrap;gap:21px;margin-top:24px;font:13px var(--mono)}.interests{display:flex;flex-wrap:wrap;gap:12px 26px;padding:17px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);font:12px/1.6 var(--mono);color:var(--muted)}.interests b{color:var(--accent);font-weight:400}.section{margin-top:58px}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:23px}.section h2{font-size:34px;letter-spacing:-.035em}.section-head a{font:12px var(--mono)}.post-row{display:grid;grid-template-columns:132px 1fr 22px;gap:24px;padding:29px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:inherit;text-decoration:none}.post-row time{font:12px/1.8 var(--mono);color:var(--muted);padding-top:5px}.post-row h3{font:25px/1.3 var(--serif);letter-spacing:-.02em}.post-row p{font-size:15px;color:var(--muted);margin-top:9px;max-width:57ch}.arrow{color:var(--accent)}.post-row:hover h3{color:var(--accent)}.tagline{display:block;font:11px var(--mono);color:var(--accent);margin-top:14px}.lower{display:grid;grid-template-columns:1.25fr 1fr;gap:74px;margin:54px 0 65px}.lower h2{font:27px var(--serif);letter-spacing:-.02em;margin-bottom:25px}.project{padding:17px 0;border-top:1px solid var(--line)}.project a{color:var(--ink);font-size:16px;font-weight:550;text-decoration:none}.project a:hover{color:var(--accent)}.project p{font-size:14px;line-height:1.7;color:var(--muted);margin-top:5px}.notes p{font-size:15px;line-height:1.85}.footer{border-top:1px solid var(--line);padding:25px 0 35px;display:flex;align-items:center;justify-content:space-between;gap:20px;font:11px/1.8 var(--mono);color:var(--muted)}.footer a{color:var(--muted)}.footer-links{display:flex;gap:19px}.page-header{padding:65px 0 40px}.page-header h1{font-size:58px;letter-spacing:-.045em}.page-header p{margin-top:18px;color:var(--muted);max-width:55ch}.archive{margin-bottom:85px}.article{max-width:740px;margin:54px auto 80px}.article .back{font:12px var(--mono)}.article-header{margin:34px 0}.article-header .meta{margin-bottom:16px;letter-spacing:.02em}.article h1{font-size:clamp(39px,5.2vw,61px);letter-spacing:-.045em;max-width:20ch}.lede{font:21px/1.6 var(--serif);color:var(--muted);margin-top:22px}.archive-note{padding:16px 20px;border-left:2px solid var(--accent);background:var(--wash);font-size:13px;line-height:1.8;margin:30px 0}.prose{font:19px/1.85 var(--serif);overflow-wrap:anywhere}.prose p{margin:1.15em 0}.prose h2{font-size:32px;letter-spacing:-.025em;margin:1.8em 0 .7em}.prose h3{font:600 20px/1.5 var(--sans);margin:1.8em 0 .6em}.prose h4,.prose h5{font:600 17px/1.5 var(--sans);margin:1.5em 0 .5em}.prose ul,.prose ol{padding-left:1.4em}.prose li{padding-left:.3em;margin:.5em 0}.prose code{font:13px/1.7 var(--mono);background:var(--code);padding:.18em .3em;border-radius:3px}.prose pre{max-width:100%;overflow:auto;background:var(--code);padding:22px 24px;border:1px solid var(--line);border-radius:4px;font:13px/1.75 var(--mono);margin:24px 0}.prose pre code{padding:0;background:none;font:inherit}.prose img{display:block;max-width:100%;height:auto;border:1px solid var(--line);border-radius:4px}.prose figure{margin:30px 0}.prose figcaption{font:12px/1.7 var(--sans);color:var(--muted);margin-top:9px}.prose details{margin:28px 0;padding:15px 19px;border:1px solid var(--line);border-radius:4px}.prose summary{cursor:pointer;font:14px/1.7 var(--sans)}.prose details pre{max-height:600px}.article-end{margin-top:45px;padding-top:23px;border-top:1px solid var(--line);font:13px/1.8 var(--sans);color:var(--muted)}.codehilite .k,.codehilite .kd,.codehilite .kn{color:var(--accent);font-weight:600}.codehilite .c,.codehilite .c1,.codehilite .cm{color:var(--muted);font-style:italic}.codehilite .s,.codehilite .s1,.codehilite .s2{color:#537548}@media(prefers-color-scheme:dark){.codehilite .s,.codehilite .s1,.codehilite .s2{color:#b5cf98}}@media(max-width:700px){.shell{width:calc(100% - 40px)}.header{padding:23px 0;gap:12px}nav{gap:18px}nav a{font-size:12px}.hero{grid-template-columns:1fr;gap:25px;padding:45px 0 36px}.hero h1{font-size:62px}.hero-bio{padding:0;font-size:17px;max-width:43ch}.eyebrow{margin-bottom:18px}.interests{gap:9px 20px}.section{margin-top:38px}.section h2{font-size:29px}.post-row{grid-template-columns:1fr 20px;gap:8px 15px;padding:23px 0}.post-row time{grid-column:1/-1}.post-row h3{font-size:24px}.lower{grid-template-columns:1fr;gap:38px;margin-top:40px}.footer{align-items:flex-start;flex-direction:column;gap:10px}.article{margin-top:32px}.article-header{margin-top:28px}.article h1{font-size:43px}.prose{font-size:18px}.prose pre{padding:17px;font-size:12px}.page-header{padding-top:42px}.page-header h1{font-size:46px}.section-head{gap:12px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* Plain, text-first personal homepage. */
:root{color-scheme:light;--paper:#faf6d8;--ink:#33332e;--muted:#626052;--line:#c6bd96;--accent:#d00068;--wash:#f0e5bd;--code:#f0e5bd;--serif:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
@media(prefers-color-scheme:dark){:root{color-scheme:light;--paper:#faf6d8;--ink:#33332e;--muted:#626052;--line:#c6bd96;--accent:#d00068;--wash:#f0e5bd;--code:#f0e5bd}}
body{font-size:18px;line-height:1.55}.shell{width:min(1000px,calc(100% - 40px))}.header{padding:21px 0 15px;border:0;justify-content:flex-start;gap:36px}.wordmark{font:700 21px var(--sans)}.wordmark span{color:inherit}nav{gap:24px}nav a{font-size:17px;color:var(--accent);text-decoration:underline}.hero{display:block;padding:25px 0 0}.eyebrow{display:none}.hero h1{font:700 36px/1.2 var(--sans);letter-spacing:0}.hero h1 br{display:none}.hero h1 em{font:inherit;color:inherit}.hero h1 em:before{content:' '}.hero-bio{padding:0;font-size:18px;line-height:1.55;margin-top:17px}.hero-bio p+p{margin-top:14px}.small-links{font:inherit;margin-top:14px;gap:19px}.interests{display:none}.section{margin-top:30px}.section-head{display:block;margin-bottom:13px}.section h2,.lower h2{font:600 25px/1.4 var(--sans);letter-spacing:0;margin-bottom:12px}.section-head>a{display:none}.post-row{display:block;border:0;padding:0 0 0 23px;position:relative}.post-row:before{content:'•';position:absolute;left:0}.post-row time{display:inline;font:inherit;color:var(--ink);padding:0}.post-row time:after{content:' — '}.post-row>div{display:inline}.post-row h3{display:inline;font:inherit;color:var(--accent);text-decoration:underline;text-underline-offset:.15em;letter-spacing:0}.post-row p{display:block;font:inherit;color:var(--ink);max-width:none;margin:3px 0 0}.tagline,.post-row .arrow{display:none}.lower{display:block;margin:30px 0}.lower section+section{margin-top:28px}.project{border:0;padding:0 0 0 23px;position:relative;margin:5px 0}.project:before{content:'•';position:absolute;left:0}.project a{font:inherit;color:var(--accent);text-decoration:underline}.project p{display:inline;font:inherit;color:var(--ink);margin:0}.project p:before{content:' — '}.notes p{font:inherit;line-height:1.55}.footer{background:var(--wash);border:0;display:block;font:15px/1.6 var(--sans);padding:13px 16px;margin:35px 0 15px}.footer-links{margin-top:10px;padding-top:9px;border-top:1px solid var(--line);flex-wrap:wrap}.footer a{color:var(--accent)}.article{margin:26px auto 55px;max-width:850px}.article h1{font:700 36px/1.25 var(--sans);letter-spacing:0;max-width:none}.article-header{margin:24px 0}.article-header .meta{font:15px var(--sans)}.lede{font:20px/1.55 var(--sans);color:var(--ink);margin-top:15px}.prose{font:18px/1.65 var(--sans)}.prose h2{font:600 26px/1.3 var(--sans);letter-spacing:0;margin:1.4em 0 .6em}.archive-note{font-size:14px}.page-header{padding:25px 0}.page-header h1{font:700 36px/1.2 var(--sans);letter-spacing:0}.page-header p{color:var(--ink)}.archive{margin-bottom:50px}@media(max-width:700px){.header{flex-wrap:wrap;gap:10px 24px}.hero{padding-top:20px}.hero h1,.article h1{font-size:30px}.hero-bio{font-size:18px}.section{margin-top:28px}.lower{margin-top:28px}.footer{font-size:14px}.article{margin-top:25px}.post-row{padding-left:20px}.post-row time{grid-column:auto}.prose{font-size:18px}}

/* Use the reader's native coding font throughout. */
:root{--sans:'SF Mono','Cascadia Code','Cascadia Mono','DejaVu Sans Mono',Consolas,'Liberation Mono',monospace;--serif:var(--sans);--mono:var(--sans)}
body{font-size:16px;line-height:1.7}.hero-bio,.prose{font-size:16px;line-height:1.7}nav a{font-size:15px}.lede{font-size:18px}.hero h1,.article h1{font-size:32px}.section h2,.lower h2{font-size:23px}
@media(max-width:700px){.hero h1,.article h1{font-size:27px}.hero-bio,.prose{font-size:16px}.header{gap:12px 22px}nav{gap:18px}}

.fetch{background:#202322;color:#d5c5a0;padding:23px 27px 29px;margin:0 0 23px;border-radius:3px;--fetch-green:#a9b665;--fetch-yellow:#e9b143;font:14px/1.65 var(--mono)}.fetch-command{margin:0 0 23px}.fetch-command>span{color:#ea6962;margin-right:9px}.fetch-output{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:30px;align-items:center}.fetch-logo{font:11px/1.15 var(--mono);color:#89b4ce;white-space:pre;overflow:visible;margin:0}.fetch-user{color:var(--fetch-green);font-weight:700}.fetch-user>span{color:#d5c5a0}.fetch-rule{color:#928374;white-space:nowrap;overflow:hidden}.hero .fetch h1{font:700 16px/1.65 var(--mono);color:#d5c5a0;margin:3px 0 10px;letter-spacing:0}.fetch dl{margin:0}.fetch dl>div{display:flex;gap:9px}.fetch dt{color:var(--fetch-yellow);font-weight:700;flex-shrink:0}.fetch dt:after{content:':'}.fetch dd{margin:0;min-width:0;overflow-wrap:anywhere}.fetch a{color:#89b4ce}.fetch-palette{display:flex;margin-top:22px;width:216px;max-width:100%;height:21px}.fetch-palette i{flex:1;background:#7c6f64}.fetch-palette i:nth-child(2){background:#ea6962}.fetch-palette i:nth-child(3){background:#a9b665}.fetch-palette i:nth-child(4){background:#e9b143}.fetch-palette i:nth-child(5){background:#7daea3}.fetch-palette i:nth-child(6){background:#d3869b}.fetch-palette i:nth-child(7){background:#89b482}.fetch-palette i:nth-child(8){background:#d4be98}@media(max-width:850px){.fetch-logo{font-size:9px}.fetch-output{gap:20px}.fetch{font-size:13px;padding:22px}.fetch dl>div{gap:7px}}@media(max-width:650px){.fetch-output{grid-template-columns:1fr;gap:25px}.fetch-logo{font-size:9px;justify-self:center}.fetch{padding:20px 17px}.fetch-command{margin-bottom:22px}.fetch-info{max-width:100%}}@media(max-width:360px){.fetch-logo{font-size:8px}.fetch{font-size:12px}}

.experience{margin:36px 0}.experience-heading{display:flex;align-items:baseline;justify-content:space-between;gap:18px;margin-bottom:23px}.experience-heading a{font-size:14px}.experience-heading h2{margin:0}.timeline{list-style:none;padding:0;margin:0}.timeline>li{border-left:3px solid var(--line);padding:0 0 0 22px;margin:0 0 28px}.timeline>li.current{border-color:var(--accent)}.timeline h3{font:700 18px/1.5 var(--mono);margin:0}.timeline .experience-date{color:var(--muted);font-size:14px;margin:4px 0 11px}.timeline p{margin:0;max-width:82ch}.timeline p+p{margin-top:8px}.timeline .experience-detail{color:var(--muted);font-size:14px}nav{flex-wrap:wrap}@media(max-width:700px){.experience{margin:30px 0}.timeline>li{padding-left:16px}.timeline h3{font-size:16px}.timeline .experience-date{font-size:13px}.experience-heading{margin-bottom:19px}}
.project{margin:10px 0}.more-projects{margin-top:17px;font-size:14px}

