@font-face{font-family:Newsreader;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-wght-normal.CCVVNp6i.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2")}:root{color-scheme:light;--paper:#f8f9f6;--ink:#232d28;--muted:#616c63;--accent:#345b46;--line:#d1d8cf;--wash:#ebefe8;--serif:Newsreader, Georgia, "Times New Roman", serif;--sans:"IBM Plex Mono", monospace;background:var(--paper);color:var(--ink);font-family:var(--serif);letter-spacing:0;font-size:18px}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper:#1d211f;--ink:#e4e7df;--muted:#a8b1a8;--accent:#b5c9ae;--line:#454d45;--wash:#292f2a}}:root[data-theme=dark]{color-scheme:dark;--paper:#1d211f;--ink:#e4e7df;--muted:#a8b1a8;--accent:#b5c9ae;--line:#454d45;--wash:#292f2a}*{box-sizing:border-box}body{margin:0;line-height:1.75}button,input{font:inherit;color:inherit}button,a,input{-webkit-tap-highlight-color:transparent}a{color:var(--accent);text-underline-offset:4px;overflow-wrap:anywhere;text-decoration-thickness:1px}a:hover{text-decoration-color:var(--ink);color:var(--ink)}button{cursor:pointer}:focus-visible{outline:2px solid var(--accent);outline-offset:5px}[hidden],.enhanced,.print-only{display:none!important}html.js .enhanced{display:inline-flex!important}html.js div.enhanced{display:block!important}.page{width:min(100% - 48px,800px);margin-inline:auto}.site-header{font-family:var(--sans);justify-content:space-between;align-items:center;gap:20px;padding-block:36px 68px;font-size:13px;display:flex}.wordmark{color:var(--ink);white-space:nowrap;font-size:13px;font-weight:400;text-decoration:none}.full-stop{color:var(--accent)}nav{flex-wrap:wrap;align-items:center;gap:16px;display:flex}nav a{color:var(--muted);text-decoration:none}nav a:hover,nav a[aria-current]{color:var(--ink)}nav a[aria-current]{text-underline-offset:7px;text-decoration:underline}h1,h2,h3,p{overflow-wrap:break-word}h1{text-wrap:balance;margin:0 0 32px;font-size:48px;font-weight:400;line-height:1.15}h2{margin:0 0 24px;font-size:28px;font-weight:400;line-height:1.25}h3{margin:0;font-size:18px;font-weight:400;line-height:1.5}p{margin:0 0 20px}main{min-height:320px}.eyebrow{font-family:var(--sans);color:var(--muted);margin-bottom:16px;font-size:12px}.introduction{grid-template-columns:104px minmax(0,1fr);column-gap:24px;display:grid}.introduction>*{grid-column:2}.introduction>.eyebrow,.introduction>h1{grid-column:1/-1}.introduction>h1{border-bottom:1px solid var(--line);margin-bottom:32px;padding-bottom:24px;font-size:88px;font-weight:350;line-height:1.05}.bio{text-wrap:pretty;font-size:22px;line-height:1.6}.introduction .bio+.bio,.muted,.date,.small{color:var(--muted)}.small{font-family:var(--sans);font-size:13px}.contact-links{font-family:var(--sans);flex-wrap:wrap;gap:28px;margin-top:16px;font-size:13px;display:flex}.contact-links a{align-items:center;min-height:44px;display:inline-flex}.contact-links a>span{margin-left:6px;transition:transform .18s;display:inline-block}.contact-links a:hover>span{transform:translate(2px,-2px)}.experience{font-size:14px;font-family:var(--sans);color:var(--muted);margin:8px 0 4px;display:inline-block;position:relative}.experience summary{cursor:pointer;text-underline-offset:5px;align-items:center;gap:3px;min-height:44px;text-decoration:underline dotted;list-style:none;display:flex}.experience summary::-webkit-details-marker{display:none}.experience sup{align-self:flex-start;padding-top:5px;font-size:10px}.experience p{background:var(--paper);border:1px solid var(--line);max-width:100%;margin:4px 0;padding:10px 14px;font-size:13px}.home-section{border-top:1px solid var(--line);margin-top:64px;padding-top:28px}.introduction~.home-section{padding-left:128px;position:relative}.section-heading{justify-content:space-between;align-items:baseline;gap:20px;display:flex}.section-heading>a{white-space:nowrap;align-items:center;gap:8px;font-size:11px;display:inline-flex}.section-number{font:11px var(--sans);color:var(--muted);position:absolute;top:34px;left:0}.career-list,.index-list,.release-list{margin:0;padding:0;list-style:none}.career-list>li{grid-template-columns:140px minmax(0,1fr);gap:24px;padding-block:0 28px;scroll-margin-top:20px;display:grid}.career-list p{margin:5px 0 0;font-size:16px}.career-list .date,.date{font-family:var(--sans);padding-top:2px;font-size:12px}.career-list .company{color:var(--muted);font-family:var(--sans);margin-block:4px 10px;font-size:13px}.education{margin-bottom:24px}.career-index{margin:0;padding:0;list-style:none}.career-index li{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) 168px;align-items:baseline;gap:24px;padding:17px 0;transition:border-color .18s;display:grid}.career-index a{flex-direction:column;text-decoration:none;display:flex}.career-index a>:first-child{color:var(--ink);font-size:21px;transition:color .18s}.career-index li:hover{border-color:var(--accent)}.career-index a:hover>:first-child,.career-index a:focus-visible>:first-child{color:var(--accent);text-underline-offset:5px;text-decoration:underline}.career-index .date{text-align:right}.career-index .small{margin-top:5px;font-size:11px;line-height:1.7}.career-index .date{font-size:10px}.focus-list{padding-left:20px;font-size:16px}.index-list li{border-bottom:1px solid var(--line);padding-block:20px}.index-list li>a{color:var(--ink);text-decoration-color:var(--line);text-underline-offset:6px;font-size:22px}.index-list li>a:hover{color:var(--accent);text-decoration-color:var(--accent)}.index-list p{color:var(--muted);margin:8px 0;font-size:16px}.index-list time{font-size:12px;font-family:var(--sans);display:block}.index-list .project-link{grid-template-columns:minmax(0,1fr) 20px;align-items:start;gap:16px;text-decoration:none;display:grid}.project-link svg{color:var(--muted);margin-top:7px;transition:transform .18s,color .18s}.project-link:hover svg{color:var(--accent);transform:translate(2px,-2px)}.project-link:hover>span{text-underline-offset:5px;text-decoration:underline}.reading-page>h1{border-bottom:1px solid var(--line);margin-bottom:36px;padding-bottom:28px}.reading-page>p:not(.eyebrow),.reading-page>article,.reading-page>.index-list{margin-left:128px}.reading-page>h2,.reading-page>.home-section{padding-left:128px}.reading-page .career-list>li{grid-template-columns:104px minmax(0,1fr)}.reading-page .focus-list{columns:2;column-gap:32px;padding:0;list-style:none}.focus-list li{break-inside:avoid;border-bottom:1px solid var(--line);padding-block:10px}.font-licenses{border-top:1px solid var(--line);margin-top:32px;padding-top:12px}.font-licenses summary{font:12px var(--sans);cursor:pointer;padding-block:14px}.font-licenses h2{margin-top:24px}.font-licenses pre{font:11px/1.7 var(--sans);white-space:pre-wrap;overflow-wrap:anywhere}.site-footer{font-family:var(--sans);color:var(--muted);margin-top:88px;padding-bottom:32px;font-size:12px}.desk-row{justify-content:space-between;align-items:flex-end;margin-bottom:18px;display:flex}.desk{color:var(--muted);display:block}.desk[data-night=true] .lamp-light{opacity:.13}.desk[data-night=true] .lampshade{fill:var(--accent)}.footer-domain{padding-bottom:6px;font-size:11px}.footer-links{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:24px;padding-top:12px;display:flex}.footer-links>:last-child{margin-left:auto}.footer-links a{align-items:center;min-height:44px;text-decoration:none;display:inline-flex}.text-button{color:var(--accent);text-underline-offset:4px;background:0 0;border:0;align-items:center;min-height:44px;padding:8px 0;text-decoration:underline}.footer-links .text-button{text-decoration:none}.icon-button{width:44px;height:44px;color:var(--muted);background:0 0;border:0;border-radius:4px;flex:0 0 44px;justify-content:center;align-items:center;padding:10px;transition:background-color .18s,color .18s;display:inline-flex}.icon-button:hover{background:var(--wash);color:var(--ink)}.skip{background:var(--paper);z-index:10;padding:10px 16px;position:fixed;top:-100px;left:16px}.skip:focus{top:16px}dialog{background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:4px;width:min(560px,100% - 32px);max-height:calc(100dvh - 48px);padding:28px;overflow:auto;box-shadow:0 24px 80px #0002}dialog::backdrop{background:#141a1680}.dialog-heading{justify-content:space-between;align-items:center;gap:16px;margin-bottom:20px;display:flex}.dialog-heading h2{margin:0;font-size:23px}dialog label,fieldset,dialog button,dialog input{font-family:var(--sans);font-size:14px}label{font-family:var(--sans);font-size:14px;display:block}input[type=search],input[type=text]{background:var(--paper);border:1px solid var(--line);border-radius:3px;width:100%;min-height:46px;margin:8px 0 12px;padding:10px 12px}.command-results{gap:4px;max-height:260px;display:grid;overflow-y:auto}.command-results a,.command-results button{text-align:left;font-family:var(--sans);background:0 0;border:0;border-radius:3px;min-height:44px;padding:10px 12px;font-size:14px;text-decoration:none;display:block}.command-results a:hover,.command-results button:hover{background:var(--wash)}#command-status{font-family:var(--sans);margin-bottom:6px;font-size:12px}.theme-picker{border:0;border-top:1px solid var(--line);flex-wrap:wrap;gap:20px;margin:20px 0 0;padding:12px 0 0;display:flex}.theme-picker legend{color:var(--muted);padding-right:12px;font-size:12px}.theme-picker label{cursor:pointer;align-items:center;gap:6px;min-height:44px;display:flex}input{accent-color:var(--accent)}.release-list li{border-top:1px solid var(--line);padding-block:12px}.release-list p{margin-bottom:8px}.loader{vertical-align:middle;gap:3px;margin-right:8px;display:inline-flex}.loader span{background:currentColor;width:5px;height:5px;animation:.9s steps(2,end) infinite blocks}.loader span:nth-child(2){animation-delay:.15s}.loader span:nth-child(3){animation-delay:.3s}@keyframes blocks{50%{opacity:.25}}.game-board{aspect-ratio:1;border:1px solid var(--line);width:100%;image-rendering:pixelated;touch-action:none;display:block}.game-stats,.game-actions{font-family:var(--sans);justify-content:space-between;align-items:center;gap:12px;margin-block:12px;font-size:14px;display:flex}.game-actions button{border:1px solid var(--line);background:var(--wash);border-radius:3px;min-height:44px;padding:8px 14px}.game-pad{grid-template-rows:repeat(2,48px);grid-template-columns:repeat(3,48px);justify-content:center;gap:5px;display:grid}.game-pad button{border:1px solid var(--line);background:var(--wash);border-radius:3px}.game-pad button:first-child{grid-column:2}.game-pad button:nth-child(2){grid-column:1}.game-help{font-family:var(--sans);font-size:13px}.composition{background:var(--wash);height:220px;font:42px var(--serif);place-items:center;margin-block:20px;display:grid;overflow:hidden}.composition span{display:inline-block}input[type=range]{width:100%;min-height:44px}:root[data-edition=early]{--serif:"Times New Roman", serif;--sans:monospace;--accent:#0000b8;--paper:#fff;--ink:#111;--muted:#444;--line:#888;--wash:#eee;color-scheme:light}[data-edition=early] .page{border-inline:1px solid var(--line);padding-inline:20px}[data-edition=early] .site-header{border-bottom:1px solid var(--line);margin-bottom:32px;padding-block:24px}[data-edition=early] a{text-decoration:underline}[data-edition=early] .career-list>li{border-top:1px solid var(--line);padding:16px 0}[data-edition=early] .career-list>li>div{border-left:1px solid var(--line);padding-left:16px}@media (prefers-reduced-motion:no-preference){.introduction>h1{animation:.5s cubic-bezier(.16,1,.3,1) both settle}.introduction>.bio{animation:.6s cubic-bezier(.16,1,.3,1) 60ms both settle}@keyframes settle{0%{transform:translateY(8px)}to{transform:translateY(0)}}}@media (width<=600px){.site-header{flex-wrap:wrap;gap:8px;padding-block:24px 44px}nav{gap:8px}h1{font-size:36px}.bio{font-size:19px}.career-list>li{grid-template-columns:1fr;gap:6px}.site-footer{margin-top:56px}.footer-domain{display:none}dialog{padding:18px}.career-index li{grid-template-columns:1fr;gap:4px}.career-index .date{text-align:left}.introduction{display:block}.introduction>h1{margin-bottom:24px;padding-bottom:24px;font-size:56px}.introduction~.home-section{padding-left:0}.home-section{margin-top:44px}.career-index li{padding-block:16px}.section-number{vertical-align:middle;margin-right:14px;display:inline-block;position:static}.reading-page>p:not(.eyebrow),.reading-page>article,.reading-page>.index-list{margin-left:0}.reading-page>h2,.reading-page>.home-section{padding-left:0}.reading-page .career-list>li{grid-template-columns:1fr}.reading-page .focus-list{columns:1}.site-header{column-gap:16px}nav{column-gap:12px}.footer-links{gap:16px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media print{:root,:root[data-theme],:root[data-edition]{--paper:white;--ink:black;--muted:#333;--accent:black;--line:#aaa;color-scheme:light;font-size:11pt}@page{margin:18mm}body{line-height:1.5}.page{width:100%;border:0!important;padding:0!important}.introduction{display:block}.introduction>h1{border:0;margin-bottom:18pt;padding-bottom:0;font-size:26pt}.introduction~.home-section{padding-left:0}.introduction>h1,.introduction>.bio{animation:none}.section-number{display:none}.reading-page>p:not(.eyebrow),.reading-page>article,.reading-page>.index-list{margin-left:0}.reading-page>h2,.reading-page>.home-section{padding-left:0}.reading-page .career-list>li{grid-template-columns:110px 1fr}.site-header,.footer-links,.desk-row,dialog,.enhanced,html.js .enhanced,.skip,.experience,.section-heading>a,.screen-only{display:none!important}h1{font-size:26pt}h2{break-after:avoid;font-size:17pt}h3{break-after:avoid}.bio{font-size:12pt}a{text-decoration:none}a[href^="https://"]:after{content:" (" attr(href) ")";overflow-wrap:anywhere;font-size:9pt}a[href^=mailto\:]:after{content:" (" attr(href) ")"}.home-section{margin-top:22pt;padding-top:14pt}.career-list>li,.index-list li,.education{break-inside:avoid}.career-list>li{grid-template-columns:110px 1fr;gap:18px}.contact-links{display:block}.contact-links a{min-height:0;display:block}.career-list>li{padding-bottom:12pt}.career-list p{margin-top:3pt;font-size:10pt;line-height:1.4}.career-list .company{margin:2pt 0 4pt;font-size:9pt}.index-list p{margin:4pt 0;font-size:10pt}.index-list li{padding-block:8pt}.contact-links a>span{display:none}.site-footer{margin-top:24pt}.print-only{display:block!important}main{min-height:0}}
