@font-face{font-family:geist;src:url(/fonts/geist-400.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:geist;src:url(/fonts/geist-500.woff2)format("woff2");font-weight:500;font-display:swap}@font-face{font-family:geist mono;src:url(/fonts/geist-mono-400.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:geist mono;src:url(/fonts/geist-mono-500.woff2)format("woff2");font-weight:500;font-display:swap}:root{--sans:"Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:"Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--ease:cubic-bezier(0.22, 1, 0.36, 1);--wrap:1120px;--narrow:720px}[data-theme=dark]{--deep:#07080d;--bg:#0b0d14;--card:#11141c;--raised:#1a1e28;--line:rgba(238, 240, 245, .08);--text:#eef0f5;--text-2:#a3a9b8;--muted:#7a8296;--accent:#f0a93b;--on-primary:#0b0d14;--code-bg:#07080d}[data-theme=light]{--deep:#eceff4;--bg:#f5f7fa;--card:#ffffff;--raised:#eceff4;--line:rgba(17, 24, 39, .1);--text:#111827;--text-2:#4b5565;--muted:#656e80;--accent:#b45309;--on-primary:#ffffff;--code-bg:#0b0d14}*,*::before,*::after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font:16px/24px var(--sans);-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}::selection{background:color-mix(in srgb,var(--accent) 35%,transparent)}img,svg{max-width:100%;height:auto}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}h1,h2,h3{font-weight:500;margin:0}p{margin:0 0 16px}ul,ol{margin:0;padding:0;list-style:none}.mono{font-family:var(--mono);font-size:12px;line-height:16px;letter-spacing:.01em}.muted{color:var(--muted)}.link{color:var(--text);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:4px;transition:text-decoration-color 150ms var(--ease),color 150ms var(--ease)}.link:hover{text-decoration-color:var(--accent)}.skip{position:absolute;left:-999px;top:0;padding:8px 16px;background:var(--text);color:var(--bg);z-index:100}.skip:focus{left:0}.wrap{width:100%;max-width:var(--wrap);margin:0 auto;padding:0 32px}.wrap.narrow{max-width:calc(var(--narrow) + 64px)}[data-theme=dark] .show-light,[data-theme=light] .show-dark{display:none}.site-header{position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.bar{display:flex;align-items:center;justify-content:space-between;height:60px;gap:16px}.brand{font-weight:500;font-size:16px;color:var(--text)}.nav{display:flex;align-items:center;gap:24px;font-size:14px}.nav a:not(.btn){color:var(--text-2);transition:color 150ms var(--ease)}.nav a:not(.btn):hover,.nav a[aria-current=page]{color:var(--text)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 20px;border-radius:8px;font:500 15px/1 var(--sans);border:1px solid transparent;cursor:pointer;transition:background-color 150ms var(--ease),border-color 150ms var(--ease),transform 150ms var(--ease)}.btn:active{transform:scale(.98)}.btn-primary{background:var(--text);color:var(--on-primary)}.btn-primary:hover{background:var(--text-2)}.btn-secondary{background:var(--raised);color:var(--text);border-color:var(--line)}.btn-secondary:hover{border-color:var(--muted)}.btn-sm{height:32px;padding:0 12px;font-size:14px}.icon-btn{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:8px;background:0 0;border:1px solid var(--line);color:var(--text-2);cursor:pointer;transition:color 150ms var(--ease),border-color 150ms var(--ease)}.icon-btn:hover{color:var(--text);border-color:var(--muted)}.icon{width:16px;height:16px;stroke-width:1.5}.hero{padding:0 0 48px}.banner{height:224px;overflow:hidden;background:var(--deep);border-bottom:1px solid var(--line)}.banner-slim{height:96px}.banner img{display:block;width:100%;height:100%;object-fit:cover;object-position:40% 55%}.hero-copy{max-width:720px}.who{position:relative;display:flex;align-items:flex-start;gap:16px;margin-bottom:32px}.who img{width:80px;height:80px;margin-top:-40px;border-radius:16px;object-fit:cover;box-shadow:0 0 0 4px var(--bg)}.who>span{padding-top:12px}.who strong{display:block;font-weight:500;font-size:18px;line-height:28px}.hero h1{font-size:48px;line-height:52px;letter-spacing:-.03em;margin-bottom:24px;max-width:18em}.lead{font-size:18px;line-height:28px;color:var(--text-2);max-width:36rem;margin-bottom:0}.cta{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px;margin-top:32px}.cta .link{padding:0 8px}.section{padding:96px 0}.section.deep{background:var(--deep);border-block:1px solid var(--line)}.section.tight{padding:32px 0 96px}.split{display:grid;grid-template-columns:4fr 8fr;gap:64px}.section-title{font-size:28px;line-height:36px;letter-spacing:-.02em}.rows li{padding:20px 0;border-top:1px solid var(--line)}.rows li:first-child{padding-top:0;border-top:0}.rows h3{font-size:18px;line-height:28px}.rows p{margin:4px 0 0;color:var(--text-2);max-width:36rem}.toolbox{margin:32px 0 0;padding-top:32px;border-top:1px solid var(--line);display:grid;gap:12px}.toolbox>div{display:grid;grid-template-columns:128px 1fr;gap:16px;align-items:baseline}.toolbox dt,.toolbox dd{margin:0}.toolbox dd{font-size:13px;line-height:20px;color:var(--text-2)}.jobs>li{display:grid;grid-template-columns:128px 1fr;gap:24px;padding:32px 0;border-top:1px solid var(--line)}.jobs>li:first-child{padding-top:0;border-top:0}.dates{margin:4px 0 0}.jobs h3{font-size:18px;line-height:28px}.jobs p{margin:0}.points{margin:12px 0}.points li{position:relative;padding-left:16px;margin-bottom:8px;color:var(--text-2)}.points li::before{content:"";position:absolute;left:0;top:11px;width:6px;height:1px;background:var(--muted)}.stack{margin:0}.earlier{max-width:36rem;margin:16px 0 0}.sub-title{font-size:16px;line-height:24px;margin:48px 0 12px}.certs{margin-bottom:24px;color:var(--text-2)}.certs li{padding:4px 0}.contact .lead{margin-bottom:0}.page-head{padding:48px 0 32px}.page-head h1{font-size:36px;line-height:40px;letter-spacing:-.02em}.page-head .lead{margin-top:16px;max-width:40rem}.crumb{margin-bottom:16px;color:var(--muted)}.crumb a:hover{color:var(--text)}.meta{margin:16px 0 0}.meta a:hover{color:var(--text)}.year{margin:48px 0 8px;padding-bottom:8px;border-bottom:1px solid var(--line);color:var(--muted);font-weight:500}.post-list li{display:flex;gap:24px;padding:8px 0;align-items:baseline}.post-list time{flex:none;width:80px}.post-list a{color:var(--text);transition:color 150ms var(--ease)}.post-list a:hover{color:var(--accent)}.post-list+p{margin-top:24px}.tag-list{display:flex;flex-wrap:wrap;gap:8px 24px;font-size:14px;line-height:24px}.tag-list a:hover{color:var(--accent)}.prose{padding:16px 0 64px;overflow-wrap:break-word;font-size:17px;line-height:28px}.prose>*+*{margin-top:16px}.prose p,.prose ul,.prose ol{margin-bottom:0}.prose h2{font-size:24px;line-height:32px;letter-spacing:-.01em;margin-top:48px}.prose h3{font-size:20px;line-height:28px;margin-top:32px}.prose h4{font-size:17px;line-height:28px;font-weight:500;margin-top:24px}.prose ul{list-style:disc;padding-left:24px}.prose ol{list-style:decimal;padding-left:24px}.prose li+li{margin-top:4px}.prose a{text-decoration:underline;text-decoration-color:var(--muted);text-underline-offset:4px;transition:text-decoration-color 150ms var(--ease)}.prose a:hover{text-decoration-color:var(--accent)}.prose strong{font-weight:500}.prose .anchor{opacity:0;margin-left:8px;text-decoration:none;color:var(--muted);font-weight:400;transition:opacity 150ms var(--ease)}.prose :is(h2,h3,h4):hover .anchor{opacity:1}.prose img{display:block;margin:24px auto;border-radius:8px;border:1px solid var(--line)}.prose blockquote{margin:24px 0;padding:0 0 0 16px;border-left:1px solid var(--muted);color:var(--text-2)}.prose hr{border:0;border-top:1px solid var(--line);margin:48px 0}.prose table{width:100%;border-collapse:collapse;font-size:15px;line-height:24px;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--line);padding:8px 12px;text-align:left}.prose th{font-weight:500;color:var(--text-2)}.prose iframe{max-width:100%;border:0}.prose code{font:.88em var(--mono);background:var(--raised);padding:2px 6px;border-radius:4px}.prose pre,.prose .highlight pre{font:14px/24px var(--mono);background:var(--code-bg)!important;color:#eef0f5;border:1px solid var(--line);border-radius:12px;padding:16px 20px;overflow-x:auto;margin:24px 0}.prose pre code{background:0 0;padding:0;font-size:inherit;color:inherit}.prose .highlight{margin:24px 0}.prose .highlight pre{margin:0}.prose .chroma{background:var(--code-bg)!important}.pager{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding-bottom:96px}.pager a{display:block;padding:16px 20px;border:1px solid var(--line);border-radius:12px;background:var(--card);transition:border-color 150ms var(--ease)}.pager a:hover{border-color:var(--muted)}.pager span{display:block;margin-bottom:4px}.pager .next{text-align:right;grid-column:2}.site-footer{border-top:1px solid var(--line);padding:32px 0}.foot{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}.foot p{margin:0}.foot-links{display:flex;flex-wrap:wrap;gap:8px 24px;color:var(--text-2)}.foot-links a{transition:color 150ms var(--ease)}.foot-links a:hover{color:var(--text)}@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.rise{animation:rise 400ms var(--ease)both;animation-delay:calc(var(--i,0) * 50ms)}@media(max-width:960px){.split{grid-template-columns:1fr;gap:32px}.section{padding:64px 0}.section.tight{padding-bottom:64px}}@media(max-width:640px){.wrap{padding:0 20px}.banner{height:160px}.hero h1{font-size:36px;line-height:40px}.nav{gap:16px}.nav-opt{display:none}.toolbox>div,.jobs>li{grid-template-columns:1fr;gap:4px}.jobs>li{padding:24px 0}.page-head{padding-top:40px}.banner-slim{height:80px}.page-head h1{font-size:32px;line-height:36px}.pager{grid-template-columns:1fr}.pager .next{grid-column:auto;text-align:left}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.rise{animation:none}*{transition:none!important}}@media print{.site-header,.site-footer{display:none}}.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.chroma .err{color:#f85149}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}