@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/58f386aa6b1a2a92-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/011e180705008d6f-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/7ba5fb2a8c88521c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/92eeb95d069020cc-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/d3ebbfd689654d3a-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ef4d5661765d0e49-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/d29838c109ef09b4-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/e40af3453d7c920a-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/99dcf268bda04fe5-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/98e207f02528a563-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:IBM Plex Mono Fallback;src:local("Arial");ascent-override:76.16%;descent-override:20.43%;line-gap-override:0.00%;size-adjust:134.59%}.__className_9f0762{font-family:IBM Plex Mono,IBM Plex Mono Fallback;font-style:normal}.__variable_9f0762{--font-mono:"IBM Plex Mono","IBM Plex Mono Fallback"}@font-face{font-family:"Instrument Serif";font-style:italic;font-weight:400;font-display:swap;src:url(/_next/static/media/5ece437c7024c161-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:"Instrument Serif";font-style:italic;font-weight:400;font-display:swap;src:url(/_next/static/media/9cc5b37ab1350db7-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Instrument Serif";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/35f3de0ebb1cfc70-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:"Instrument Serif";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/e6099e249fd938cc-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:"Instrument Serif Fallback";src:local("Times New Roman");ascent-override:117.94%;descent-override:36.93%;line-gap-override:0.00%;size-adjust:83.94%}.__className_ae301a{font-family:"Instrument Serif","Instrument Serif Fallback";font-weight:400}.__variable_ae301a{--font-serif:"Instrument Serif","Instrument Serif Fallback"}:root{--bg:#0b0a08;--ink:#f3eee6;--muted:#b3a89a;--faint:#8c8274;--line:rgba(243,238,230,0.14);--line-strong:rgba(243,238,230,0.28);--accent:#ffb35c;--accent-ink:#1a1208;--hot:#ff6a3d;--ok:#b7ebc8;--shadow:0 30px 80px rgba(0,0,0,0.45);--selection:rgba(255,179,92,0.28);color-scheme:dark}[data-theme=paper]{--bg:#efe6d6;--ink:#1c1612;--muted:#5c5146;--faint:#7a6e62;--line:rgba(28,22,18,0.14);--line-strong:rgba(28,22,18,0.3);--accent:#c2410c;--accent-ink:#fff7ed;--hot:#9a3412;--ok:#3f6212;--shadow:0 24px 50px rgba(80,48,16,0.12);--selection:rgba(194,65,12,0.18);color-scheme:light}[data-theme=mint]{--accent:#8ee0b8;--accent-ink:#062117;--hot:#d8fff0;--selection:rgba(142,224,184,0.28)}[data-theme=coral]{--accent:#ff7a59;--accent-ink:#2a0d08;--hot:#ffd0c4;--selection:rgba(255,122,89,0.28)}*{box-sizing:border-box}body,html{margin:0;min-height:100%;background:var(--bg);overflow-x:clip}body{color:var(--ink);font-family:var(--font-mono),ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;font-size:14px;line-height:1.5;text-rendering:optimizeLegibility}::selection{background:var(--selection);color:var(--ink)}button,input{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--accent);text-underline-offset:3px}a:hover{color:var(--ink)}:focus-visible{outline:1px solid var(--accent);outline-offset:3px}*{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}.skip-link{position:absolute;left:12px;top:-48px;z-index:80;background:var(--accent);color:var(--accent-ink);padding:8px 12px;text-decoration:none}.skip-link:focus{top:12px}.field{width:100%;height:100%;z-index:0;display:block;background:var(--bg)}.field,.grain{position:fixed;inset:0}.grain{z-index:1;pointer-events:none;opacity:.16;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)' opacity='0.55'/></svg>")}[data-theme=paper] .grain{opacity:.07;mix-blend-mode:multiply}.os{z-index:2;min-height:100dvh;justify-content:center;padding:max(10px,env(safe-area-inset-top)) max(10px,env(safe-area-inset-right)) max(10px,env(safe-area-inset-bottom)) max(10px,env(safe-area-inset-left))}.os,.shell{position:relative;display:flex}.shell{width:min(1440px,100%);min-height:calc(100dvh - 20px);flex-direction:column;border:1px solid var(--line);background:color-mix(in srgb,var(--bg) 28%,transparent)}.tick{position:absolute;width:12px;height:12px;z-index:6;pointer-events:none;border-color:var(--accent);border-style:solid}.tl{left:-1px;border-width:1px 0 0 1px}.tl,.tr{top:-1px}.tr{right:-1px;border-width:1px 1px 0 0}.bl{left:-1px;border-width:0 0 1px 1px}.bl,.br{bottom:-1px}.br{right:-1px;border-width:0 1px 1px 0}.top{height:46px;flex:none;align-items:center;justify-content:space-between;gap:12px;padding:0 14px;border-bottom:1px solid var(--line);font-size:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none;background:color-mix(in srgb,var(--bg) 55%,transparent)}.brand,.top{display:flex}.brand{gap:8px;min-width:0;align-items:baseline}.brand b{font-weight:500;white-space:nowrap}.dim{color:var(--faint)}.top-meta{display:flex;gap:10px;color:var(--muted)}.live,.top-meta{align-items:center}.live{display:inline-flex;gap:6px;color:var(--ok)}.dot{width:6px;height:6px;border-radius:99px;background:var(--ok);box-shadow:0 0 0 0 color-mix(in srgb,var(--ok) 70%,transparent);animation:pulse 2.6s ease-out infinite}@keyframes pulse{70%{box-shadow:0 0 0 6px transparent}to{box-shadow:0 0 0 0 transparent}}.kbd{border:1px solid var(--line);padding:1px 6px;color:var(--faint);font-family:ui-sans-serif,system-ui,sans-serif}.stage{flex:1 1;display:flex;flex-direction:column;gap:18px;padding:18px 14px 16px;min-height:0}.hero,.stage{position:relative}.hero{container-type:inline-size}.hero:before{content:"";position:absolute;z-index:-1;inset:-18% -8%;pointer-events:none;background:radial-gradient(ellipse at 30% 40%,color-mix(in srgb,var(--bg) 88%,transparent),transparent 70%)}.eyebrow{margin:0;color:var(--muted);font-size:12px;letter-spacing:.04em}h1{margin:10px 0 0;display:flex;flex-direction:column;font-family:var(--font-serif),Georgia,"Iowan Old Style",serif;font-size:clamp(3.4rem,16vw,5.4rem);line-height:.84;letter-spacing:-.045em}h1,h1 em{font-weight:400}h1 em{font-style:italic;color:var(--accent)}.rule{width:52px;height:1px;margin:16px 0 14px;border:0;background:var(--accent)}.lede{margin:0;max-width:42ch;color:var(--ink);font-size:14px;line-height:1.55}.now{margin:14px 0 0;color:var(--muted);font-size:12px}.now span{color:var(--accent);margin-right:8px}.metrics{list-style:none;margin:22px 0 0;padding:0;display:grid;grid-template-columns:1fr 1fr;grid-gap:14px 18px;gap:14px 18px;max-width:520px}.metric b{display:block;font-family:var(--font-serif),Georgia,serif;font-size:32px;font-weight:400;letter-spacing:-.04em;line-height:1;color:var(--accent)}.metric span{display:block;margin-top:5px;color:var(--muted);font-size:12px;line-height:1.35;max-width:22ch}.index{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}.index button{background:transparent;border:1px solid var(--line-strong);border-radius:999px;padding:8px 12px;font-size:12px;letter-spacing:.04em}.index button:hover{border-color:var(--accent);color:var(--accent)}.index button.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.term{display:flex;flex-direction:column;min-height:420px;height:58dvh;border:1px solid var(--line-strong);border-radius:12px;background:color-mix(in srgb,var(--bg) 92%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.04);overflow:hidden}[data-theme=paper] .term{box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.65)}.term-bar,.win-bar{flex:none;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 12px;border-bottom:1px solid var(--line);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);-webkit-user-select:none;-moz-user-select:none;user-select:none}.term-bar button,.win-bar button{background:transparent;border:0;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;padding:2px 0}.term-bar button:hover,.win-bar button:hover{color:var(--accent)}.term-out{flex:1 1;min-height:0;overflow:auto;padding:14px 14px 8px;font-size:13px;line-height:1.55}.term-in{flex:none;display:flex;align-items:center;gap:8px;padding:10px 12px max(12px,env(safe-area-inset-bottom));border-top:1px solid var(--line)}.cwd{color:var(--faint);flex:none}.chev{color:var(--accent);flex:none}.term-in input{flex:1 1;min-width:0;background:transparent;border:0;outline:none;font-size:16px;padding:0;caret-color:var(--accent)}.term-in input::placeholder{color:var(--faint)}.term:focus-within{border-color:color-mix(in srgb,var(--accent) 55%,var(--line))}.cmd{margin:0 0 8px}.cmd .cwd{margin-right:6px}.out-err,.out-text{margin:0 0 12px;white-space:pre-wrap}.out-err{color:var(--hot)}.out-links,.out-list{list-style:none;margin:0 0 12px;padding:0}.out-links li,.out-list li{margin:2px 0}.fetch{display:grid;grid-template-columns:auto 1fr;grid-gap:8px 14px;gap:8px 14px;align-items:start;margin:0 0 14px}.mark{width:64px;height:64px;display:grid;place-items:center;border:1px solid var(--line-strong);color:var(--accent);font-family:var(--font-serif),Georgia,serif;font-size:26px}.pair{display:contents}.fetch dl{margin:0;display:grid;grid-template-columns:58px 1fr;grid-gap:2px 10px;gap:2px 10px;align-content:start}.fetch dt{color:var(--faint)}.fetch dd{margin:0}.win{position:absolute;max-width:calc(100% - 20px);max-height:calc(100% - 16px);display:flex;flex-direction:column;border:1px solid var(--line-strong);border-radius:12px;background:var(--bg);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.04);overflow:hidden}[data-theme=paper] .win{box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.7)}.win-bar{cursor:-webkit-grab;cursor:grab;touch-action:none}.win-bar:active{cursor:-webkit-grabbing;cursor:grabbing}.win-body{overflow:auto;padding:14px 16px 18px;min-height:0}.timeline{list-style:none;margin:0;padding:0}.role{border-top:1px solid var(--line);padding:10px 0 12px}.role:first-child{border-top:0;padding-top:0}.role-btn{width:100%;text-align:left;background:transparent;border:0;padding:0}.role-top{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.role-top strong{font-weight:500}.role-co,.role-top em{font-style:normal;color:var(--muted);font-size:12px}.role-co{margin-top:3px}.role ul{margin:10px 0 0;padding-left:16px}.role li{margin:7px 0}.stack{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.stack span{border:1px solid var(--line);color:var(--muted);padding:2px 6px;font-size:11px}.proj{display:flex;flex-direction:column;gap:12px}.proj-nav{display:flex;gap:6px;overflow:auto;padding-bottom:2px}.proj-nav button{flex:none;background:transparent;border:1px solid var(--line);padding:6px 10px;font-size:12px}.proj-nav button.on{border-color:var(--accent);color:var(--accent)}.kicker{margin:0;color:var(--faint);font-size:11px;letter-spacing:.14em;text-transform:uppercase}.about h3,.contact h3,.proj h3{margin:4px 0 8px;font-family:var(--font-serif),Georgia,serif;font-size:32px;font-weight:400;letter-spacing:-.03em}.about p,.proj p{margin:0 0 10px}.proj ul{margin:0 0 12px;padding-left:16px}.proj li{margin:6px 0}.links{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.ghost,.links a{border:1px solid var(--line-strong);padding:6px 10px;text-decoration:none;font-size:12px;letter-spacing:.06em;text-transform:uppercase}.ghost:hover,.links a:hover{border-color:var(--accent)}.skills{display:flex;flex-direction:column;gap:14px}.skills h3{margin:0 0 6px;font-size:11px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}.skills p{margin:0}.who{display:flex;gap:12px;align-items:center;margin-bottom:14px}.who img{width:56px;height:56px;object-fit:cover;border-radius:50%;border:1px solid var(--line-strong)}.who p{margin:2px 0 0;color:var(--muted);font-size:12px}.mail{width:100%;display:flex;justify-content:space-between;gap:10px;align-items:center;text-align:left;background:transparent;border:1px solid var(--line-strong);padding:10px 12px;margin-bottom:8px}.mail strong{font-weight:500}.mail em{font-style:normal;color:var(--accent);font-size:12px}.rows{list-style:none;margin:8px 0 0;padding:0}.rows a{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid var(--line);text-decoration:none;color:var(--ink)}.rows a span{color:var(--faint)}.rows a:hover{color:var(--accent)}.edu{margin-top:8px}.edu div{padding:8px 0;border-top:1px solid var(--line)}.edu strong{display:block;font-weight:500}.edu span{color:var(--muted);font-size:12px}.scrim{position:fixed;inset:0;z-index:24;border:0;background:rgba(0,0,0,.48)}[data-theme=paper] .scrim{background:rgba(48,34,18,.25)}.boot-cover{display:none;position:absolute;z-index:7;left:0;right:0;top:46px;bottom:0;padding:22px 18px 26px;flex-direction:column;justify-content:flex-end;gap:4px;font-size:13px;background:linear-gradient(to top,color-mix(in srgb,var(--bg) 55%,transparent),transparent 70%)}.boot-cover .ln{margin:0;white-space:pre-wrap}.boot-cover .ok{color:var(--ok);display:inline-block;min-width:4ch;margin-right:.75ch}.boot-cover .skip{position:absolute;top:12px;right:14px;background:transparent;border:1px solid var(--line-strong);padding:6px 10px;font-size:11px;letter-spacing:.12em;text-transform:uppercase}.caret{display:inline-block;width:.55ch;height:.95em;margin-left:4px;background:var(--accent);transform:translateY(2px);animation:blink 1.1s steps(1) infinite}@keyframes blink{50%{opacity:0}}.is-booting .boot-cover,html.will-boot .boot-cover{display:flex}.is-booting .stage,html.will-boot .stage{opacity:0;pointer-events:none}.is-booting .boot-cover .ln,html.will-boot .boot-cover .ln{opacity:0;animation:rise .25s ease forwards}.is-booting .boot-cover .ln:first-child,html.will-boot .boot-cover .ln:first-child{animation-delay:.05s}.is-booting .boot-cover .ln:nth-child(2),html.will-boot .boot-cover .ln:nth-child(2){animation-delay:.28s}.is-booting .boot-cover .ln:nth-child(3),html.will-boot .boot-cover .ln:nth-child(3){animation-delay:.44s}.is-booting .boot-cover .ln:nth-child(4),html.will-boot .boot-cover .ln:nth-child(4){animation-delay:.6s}.is-booting .boot-cover .ln:nth-child(5),html.will-boot .boot-cover .ln:nth-child(5){animation-delay:.76s}.is-booting .boot-cover .ln:nth-child(6),html.will-boot .boot-cover .ln:nth-child(6){animation-delay:.96s}@keyframes rise{to{opacity:1}}.miss{min-height:100dvh;display:flex;flex-direction:column;justify-content:center;gap:12px;padding:32px 22px}.miss h1{font-size:clamp(2.6rem,8vw,4.5rem);display:block}.miss a{width:-moz-fit-content;width:fit-content}@media (max-width:420px){.fetch{grid-template-columns:1fr}.metric b{font-size:28px}.brand .dim{display:none}}@media (min-width:861px){.shell{height:calc(100dvh - 28px);min-height:0}.stage{display:grid;grid-template-columns:minmax(0,1.12fr) minmax(380px,.88fr);grid-gap:26px;gap:26px;padding:26px 28px 22px;align-items:center}.hero{align-self:center}h1{font-size:clamp(4.4rem,8vw,7.2rem)}.term{height:auto;max-height:100%;width:100%;min-height:0;align-self:center}.term-out{flex:0 1 auto;max-height:min(48dvh,420px)}.term-in{padding-bottom:12px}.term-in input{font-size:14px}.proj{display:grid;grid-template-columns:150px minmax(0,1fr);grid-gap:18px;gap:18px;min-height:280px}.proj-nav{flex-direction:column;overflow:visible}.proj-nav button{text-align:left}}@supports (font-size:1cqi){@media (min-width:861px){h1{font-size:clamp(3.6rem,18cqi,7.4rem)}}}@media (max-width:860px){.win{position:fixed;left:10px;right:10px;top:auto;bottom:max(10px,env(safe-area-inset-bottom));width:auto!important;max-height:min(78dvh,680px);z-index:30}.win-bar{cursor:default;touch-action:auto}.kbd{display:none}}@media (min-width:861px) and (max-height:820px){h1{font-size:clamp(3.2rem,7vh,5.2rem)}.lede{font-size:13px}.metrics{margin-top:14px;gap:10px 16px}.metric b{font-size:26px}.index{margin-top:14px}.rule{margin:12px 0}}@media (prefers-reduced-motion:reduce){.caret,.dot,.is-booting .boot-cover .ln,html.will-boot .boot-cover .ln{animation:none;opacity:1}html.will-boot .stage{opacity:1;pointer-events:auto}html.will-boot .boot-cover{display:none}}