@font-face{font-family:Writing;src:local("Iowan Old Style"),local("Palatino Linotype"),local("Palatino");font-display:swap}:root{color-scheme:dark;--bg:#111110;--surface:#191918;--text:#ecece8;--muted:#a1a19a;--faint:#76766f;--line:#30302c;--white:#fff;--serif:Writing,Georgia,"Times New Roman",serif;--sans:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:32px}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:15px;line-height:1.7;-webkit-font-smoothing:antialiased}::selection{background:#deded2;color:#111}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:5px}a:hover{color:var(--white)}a,button,input,textarea,select{outline-offset:5px}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--text)}button,input,textarea,select{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent}button{cursor:pointer}svg{display:inline-block;vertical-align:middle}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-weight:400}p{margin-bottom:1.3em}.shell{max-width:1016px;padding:0 48px;margin:auto}.site-header{min-height:129px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);gap:24px}.identity{text-decoration:none;display:flex;gap:13px;align-items:center;font-size:15px;font-weight:500;letter-spacing:-.2px}.identity-mark{width:29px;height:29px;border:1px solid #66665d;display:grid;place-items:center;border-radius:50%;font-family:var(--serif);font-style:italic;font-size:19px;font-weight:400}.navigation{display:flex;gap:29px;font-size:13px;color:var(--muted)}.navigation a{text-decoration:none}.navigation a[aria-current=page]{color:var(--text)}.navigation a[aria-current=page]:after{content:"";display:block;height:3px;width:3px;border-radius:50%;background:var(--text);margin:7px auto -10px}.hero{padding:89px 0 76px;max-width:760px}.eyebrow{font-family:var(--mono);font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);display:flex;align-items:center;gap:12px;margin-bottom:27px}.eyebrow:before{content:"";width:16px;height:1px;background:var(--muted)}h1{font-family:var(--serif);font-size:clamp(46px,6.3vw,72px);line-height:1.09;letter-spacing:-2.6px;margin:0 0 29px;max-width:700px}.hero h1{max-width:640px}.hero h1 em{color:#aaa99e;font-weight:400}.intro{color:var(--muted);font-size:16px;line-height:1.85;max-width:490px;white-space:pre-line}.hero-links{display:flex;gap:27px;margin-top:30px;font-size:12px}.hero-links a{text-decoration:none;border-bottom:1px solid #64645b;padding-bottom:3px}.arrow{padding-left:6px}.section{border-top:1px solid var(--line);padding:33px 0 39px;display:grid;grid-template-columns:210px minmax(0,1fr);gap:38px}.section-label h2{font-size:14px;letter-spacing:-.1px;margin:0 0 8px}.section-label p{color:var(--faint);font-size:12px;max-width:140px;line-height:1.7}.section-label .count{font-family:var(--mono);font-size:10px;color:var(--faint);padding-left:8px}.section-main{min-width:0}.empty{padding:4px 0 10px}.empty h3{font-family:var(--serif);font-size:25px;letter-spacing:-.4px;margin-bottom:7px}.empty p{color:var(--muted);font-size:13px;margin-bottom:19px;max-width:450px}.text-link{font-size:12px;text-decoration:none;border-bottom:1px solid #51514a;padding-bottom:4px}.entry-list{list-style:none;margin:0;padding:0}.entry-row{padding:20px 0;border-bottom:1px solid var(--line)}.entry-row:last-child{border:0}.entry-title{display:flex;align-items:baseline;justify-content:space-between;gap:20px;font-family:var(--serif);font-size:25px;text-decoration:none;line-height:1.3}.entry-title .arrow{font:16px var(--sans);color:var(--faint)}.entry-summary{margin:8px 0 12px;color:var(--muted);font-size:13px;max-width:510px}.entry-meta{font-size:10px;font-family:var(--mono);color:var(--faint);display:flex;flex-wrap:wrap;gap:12px}.section-bottom{margin-top:25px}.about-copy{font-family:var(--serif);font-size:22px;line-height:1.55;white-space:pre-line;max-width:550px}.about-placeholder{color:var(--muted);font-size:14px;max-width:450px}.contact-links{display:flex;gap:22px;flex-wrap:wrap;font-size:12px;margin-top:20px}.contact-links a{text-decoration:none}.site-footer{border-top:1px solid var(--line);padding:29px 0 40px;display:flex;justify-content:space-between;gap:20px;color:var(--faint);font-size:10px}.footer-links{display:flex;gap:20px}.footer-links a{text-decoration:none}.colophon{display:flex;gap:9px;align-items:center}.status-dot{width:4px;height:4px;background:#aaa99e;border-radius:50%}.skip-link{position:fixed;top:-100px;left:20px;padding:8px 16px;background:var(--text);color:var(--bg);z-index:10}.skip-link:focus{top:12px}.index-heading{padding:70px 0 46px}.index-heading h1{font-size:58px}.index-heading .intro{margin-bottom:0}.index-content{padding:31px 0 90px;border-top:1px solid var(--line);min-height:300px}.index-content .entry-row{padding:28px 0}.index-content .entry-title{font-size:30px}.back-link{font-size:12px;color:var(--muted);text-decoration:none}.article-header{padding:45px 0 34px}.article-header h1{font-size:clamp(38px,5.5vw,60px);margin-top:37px}.article-header .intro{max-width:670px;font-size:18px}.article-header .entry-meta{font-size:11px}.prose{max-width:680px;font-family:var(--serif);font-size:19px;line-height:1.85;overflow-wrap:anywhere}.prose h2{font-family:var(--sans);font-size:26px;line-height:1.4;margin:44px 0 18px;letter-spacing:-.5px}.prose h3,.prose h4,.prose h5,.prose h6{font-family:var(--sans);font-size:20px;line-height:1.4;margin:30px 0 14px}.prose blockquote{border-left:2px solid #717168;margin:30px 0;padding:0 24px;color:var(--muted);font-style:italic}.prose pre{background:var(--surface);border:1px solid var(--line);padding:20px;font:13px/1.8 var(--mono);overflow:auto}.prose code{font-family:var(--mono);font-size:.8em}.prose img{max-width:100%;height:auto}.prose table{display:block;overflow-x:auto;font-family:var(--sans);font-size:14px;border-collapse:collapse}.prose th,.prose td{padding:10px;border:1px solid var(--line)}.article-body{padding:10px 0 65px}.topics{display:flex;gap:10px;margin-top:26px;flex-wrap:wrap}.topic{font:10px var(--mono);border:1px solid var(--line);padding:5px 9px;border-radius:2px}.notice{padding:14px 18px;border:1px solid #55554b;background:var(--surface);font-size:13px;margin:0 0 27px}.notice.error{border-color:#a76f63;color:#efb7a8}.notice.success{border-color:#677460;color:#c3d4b8}.button{display:inline-flex;gap:12px;align-items:center;justify-content:center;padding:10px 17px;border:1px solid var(--text);background:var(--text);color:var(--bg);text-decoration:none;font-size:12px;font-weight:500;line-height:1.5;border-radius:3px}.button:hover{background:#fff;color:#111}.button.secondary{border-color:var(--line);color:var(--text);background:transparent}.button.secondary:hover{border-color:var(--muted)}.admin-header{padding:44px 0 31px;display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.admin-header h1{font-size:42px;letter-spacing:-1.4px;margin-bottom:10px}.admin-header p{color:var(--muted);font-size:13px;margin:0}.admin-nav{display:flex;gap:28px;border-bottom:1px solid var(--line);margin:0 0 32px;font-size:13px}.admin-nav a{text-decoration:none;padding:13px 0;color:var(--muted)}.admin-nav a[aria-current=page]{border-bottom:1px solid var(--text);color:var(--text)}.admin-content{padding-bottom:70px;min-height:500px}.admin-counts{display:flex;gap:46px;padding-bottom:25px;border-bottom:1px solid var(--line);margin-bottom:25px}.admin-counts strong{font-family:var(--serif);font-size:32px;font-weight:400;display:block;line-height:1.3}.admin-counts span{font-size:11px;color:var(--muted)}.admin-row{display:grid;grid-template-columns:minmax(0,1fr) 80px 90px 24px;gap:18px;align-items:center;padding:19px 0;border-bottom:1px solid var(--line);font-size:12px;text-decoration:none}.admin-row strong{font-weight:400;font-size:15px}.admin-row small{color:var(--faint);display:block;font-size:11px}.badge{font-size:10px;display:inline-flex;align-items:center;gap:6px;color:var(--muted)}.badge:before{content:"";display:block;width:4px;height:4px;border-radius:50%;background:currentColor}.badge.published{color:#c3d4b8}.form-grid{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:40px}.field{display:block;margin-bottom:23px}.field>span,.field-label{display:block;font-size:12px;font-weight:500;margin-bottom:8px}.field small,.help{display:block;color:var(--muted);font-size:11px;line-height:1.6;margin-top:7px}.field input,.field textarea,.field select{width:100%;background:var(--surface);color:var(--text);border:1px solid #3b3b35;border-radius:3px;padding:11px 12px;font-size:13px;line-height:1.6}.field input:focus,.field textarea:focus,.field select:focus{border-color:#b5b5a8}.field textarea{resize:vertical}.field .editor{min-height:420px;font:12px/1.9 var(--mono)}.field input::placeholder,.field textarea::placeholder{color:var(--faint)}.form-sidebar{border-left:1px solid var(--line);padding-left:26px}.form-sidebar .button{width:100%;margin-bottom:11px}.form-section{max-width:650px;padding:0 0 24px;margin-bottom:27px;border-bottom:1px solid var(--line)}.form-section h2{font-family:var(--serif);font-size:26px;margin-bottom:22px}.check-row{display:flex;gap:10px;font-size:12px;align-items:flex-start;margin:12px 0}.check-row input{accent-color:#d9d9ce;margin-top:5px}.actions{display:flex;gap:12px;flex-wrap:wrap}.login{max-width:420px;margin:80px auto 100px}.login h1{font-size:46px;letter-spacing:-1.5px}.login p{color:var(--muted);font-size:14px}.login .button{width:100%}.revision{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:15px 0;border-bottom:1px solid var(--line);font-size:12px}.revision small{display:block;color:var(--muted)}details summary{cursor:pointer;font-size:12px;color:var(--muted);margin:24px 0 14px}.preview-panel{margin:35px 0;padding:28px;border:1px solid var(--line)}.preview-panel>h2{font:10px var(--mono);text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}.no-content{padding:45px 0}.no-content h2{font-family:var(--serif);font-size:28px;margin-bottom:9px}.no-content p{color:var(--muted);font-size:13px}.error-page{padding:100px 0 140px}.error-page p{color:var(--muted)}@media(min-width:1300px){.shell{max-width:1060px}.hero{padding-top:98px;padding-bottom:87px}h1{font-size:76px}.section{padding-top:36px;padding-bottom:43px}}@media(max-width:700px){.shell{padding:0 25px}.site-header{min-height:96px;gap:18px}.navigation{gap:19px;font-size:12px}.identity{font-size:13px}.identity-mark{width:25px;height:25px;font-size:16px}.hero{padding:62px 0 54px}.hero h1{max-width:440px;font-size:54px;letter-spacing:-2px}.intro{font-size:15px}.section{grid-template-columns:1fr;gap:15px;padding:26px 0 30px}.section-label{display:flex;justify-content:space-between;align-items:baseline;gap:20px}.section-label p{max-width:none;margin:0;font-size:11px}.section-label h2{margin-bottom:0}.empty{padding:7px 0}.site-footer{font-size:9px;flex-wrap:wrap}.footer-links{gap:15px}.index-heading{padding:49px 0 35px}.index-heading h1{font-size:48px}.form-grid{grid-template-columns:1fr;gap:20px}.form-sidebar{border-left:0;border-top:1px solid var(--line);padding:25px 0 0}.form-sidebar .button{width:auto}.admin-header{align-items:flex-start}.admin-header h1{font-size:35px}.admin-row{grid-template-columns:minmax(0,1fr) 90px;gap:10px}.admin-row>.entry-kind{display:none}.admin-counts{gap:28px}.prose{font-size:18px}.login{margin:60px auto}.eyebrow{font-size:9px}.hero-links{font-size:11px;gap:23px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}:root{--faint:#8a8a82}@media(max-width:380px){.shell{padding:0 22px}.navigation{gap:14px;font-size:11px}.identity{gap:9px;font-size:12px}.hero h1{font-size:49px}}:root{color-scheme:dark;--bg:#000000;--surface:#111111;--text:#eceee9;--muted:#a2a69e;--faint:#81877d;--line:#30342e;--white:#fff;--serif:Writing,Georgia,"Times New Roman",serif;--sans:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}:root[data-theme=light]{color-scheme:light;--bg:#f8f9f6;--surface:#eff1eb;--text:#22251f;--muted:#646a60;--faint:#7b8177;--line:#e0e3dc;--white:#11140f}body{background:var(--bg);color:var(--text);transition:background-color .2s ease,color .2s ease}.shell{max-width:804px;padding:0 44px}.site-header{min-height:96px;border-color:var(--line)}.identity{gap:10px;font-size:13px;color:var(--muted)}.identity-mark{height:30px;width:30px;border-color:var(--line);color:var(--text);font:500 11px var(--sans);font-style:normal;background:var(--surface)}.theme-toggle{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;padding:0;border:0;border-radius:0;background:transparent;color:var(--muted)}.theme-toggle:hover{color:var(--text)}.theme-icon{display:block}.theme-icon-moon{display:none}:root[data-theme=light] .theme-icon-sun{display:none}:root[data-theme=light] .theme-icon-moon{display:block}.profile-page{max-width:660px;margin:0 auto}.profile-hero{display:grid;grid-template-columns:68px minmax(0,1fr);column-gap:20px;align-items:start;padding:61px 0 42px}.profile-avatar{width:64px;height:64px;border:1px solid var(--line);border-radius:50%;background:var(--surface);display:grid;place-items:center;color:var(--text);font-family:var(--serif);font-size:23px}.profile-copy{padding-top:2px}.profile-greeting{font-size:15px;color:var(--muted);margin:0 0 1px}.profile-hero h1{font:500 32px/1.25 var(--sans);letter-spacing:-1.1px;margin:0 0 5px}.profile-role{font-size:14px;color:var(--text);margin:0 0 15px}.profile-intro{font-size:13px;color:var(--muted);line-height:1.8;max-width:490px;margin:0;white-space:pre-line}.profile-section{padding:23px 0 25px;border-top:1px solid var(--line)}.profile-section-title{font:600 10px/1.4 var(--sans);letter-spacing:.11em;text-transform:uppercase;color:var(--faint);margin:0 0 16px}.profile-section-heading{display:flex;justify-content:space-between;align-items:baseline;gap:15px}.profile-section-heading .profile-section-title{margin-bottom:15px}.subtle-link{font-size:11px;text-decoration:none;color:var(--muted)}.subtle-link:hover{color:var(--text)}.profile-about{font-size:13px;line-height:1.85;color:var(--muted);margin:0;max-width:570px;white-space:pre-line}.currently-card{display:grid;grid-template-columns:20px 1fr;gap:10px;padding:0 0 0 1px;align-items:start}.currently-mark{font-size:15px;color:var(--faint)}.currently-card p{font-size:13px;margin:0 0 4px}.currently-note{font-size:11px;color:var(--faint)}.project-grid{display:grid;grid-template-columns:1fr;gap:9px}.project-card{position:relative;display:grid;grid-template-columns:34px minmax(0,1fr) 14px;gap:11px;align-items:center;min-height:68px;padding:12px;border:1px solid var(--line);border-radius:7px;text-decoration:none;background:color-mix(in srgb,var(--surface) 42%,transparent);transition:border-color .16s ease,transform .16s ease,background-color .16s ease}.project-card:hover{color:var(--text);border-color:var(--faint);background:var(--surface);transform:translateY(-1px)}.project-copy{min-width:0;display:grid;gap:3px}.project-title{font-size:12px;font-weight:500;line-height:1.4;color:var(--text)}.project-summary{font-size:10px;color:var(--faint);line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.profile-empty{display:flex;align-items:baseline;justify-content:space-between;gap:15px;padding:0 0 3px;font-size:12px;color:var(--muted)}.profile-empty p{margin:0}.profile-empty a,.social-links a{color:var(--muted);font-size:11px;text-decoration:none}.profile-empty a:hover,.social-links a:hover{color:var(--text)}.social-links{display:flex;gap:19px;flex-wrap:wrap}.social-links a span{color:var(--faint);padding-left:2px}.entry-row{padding:15px 0}.entry-row:first-child{padding-top:0}.entry-title{font:500 16px/1.4 var(--sans);letter-spacing:-.2px}.entry-title .arrow{font-size:12px}.entry-summary{font-size:11px;margin:5px 0 8px;line-height:1.6}.entry-meta{font-size:9px;gap:9px}.site-footer{max-width:660px;margin:0 auto;padding:23px 0 32px;align-items:center}.colophon{display:none}.footer-links{gap:15px}.index-heading{padding-top:52px}.index-heading h1{font-size:44px;letter-spacing:-1.4px}.article-header h1{font-family:var(--serif);font-weight:400}@media(max-width:620px){.shell{padding:0 22px}.site-header{min-height:78px}.profile-hero{grid-template-columns:54px minmax(0,1fr);gap:15px;padding:45px 0 30px}.profile-avatar{width:52px;height:52px;font-size:20px}.profile-hero h1{font-size:28px}.profile-greeting,.profile-role{font-size:13px}.profile-intro,.profile-about{font-size:12px}.profile-section{padding:20px 0 22px}.project-grid{grid-template-columns:1fr}.project-card{min-height:63px}.site-footer{padding-bottom:26px}.site-footer>span:first-child{font-size:9px}.footer-links{font-size:9px}}@media(max-width:370px){.shell{padding:0 17px}.profile-hero{grid-template-columns:46px minmax(0,1fr);gap:12px}.profile-avatar{width:44px;height:44px;font-size:18px}.profile-hero h1{font-size:25px}}@media(prefers-reduced-motion:reduce){body,.project-card{transition:none}.project-card:hover{transform:none}}.profile-hero{display:block}.profile-copy{padding-top:0}.currently-card{display:block}.project-card{grid-template-columns:minmax(0,1fr) auto}.project-card.has-logo{grid-template-columns:34px minmax(0,1fr) auto}.project-logo,.education-logo{display:grid;place-items:center;overflow:hidden;background:#000;border-radius:5px}.project-logo{width:34px;height:34px}.project-logo img{display:block;width:34px;height:34px;object-fit:contain}.project-title{width:max-content;max-width:100%;text-decoration:none}.project-title:hover{text-decoration:underline;text-underline-offset:3px}.project-repo,.repository-link{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:10px;text-decoration:none;white-space:nowrap}.project-repo:hover,.repository-link:hover{color:var(--text)}.repository-link{margin-top:8px;font-size:12px}.activity-list{list-style:none;margin:0;padding:0}.activity-list li{display:flex;align-items:center;gap:9px;padding:10px 0;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}.activity-name{flex:1}.activity-date{font:10px/1.5 var(--mono);color:var(--faint);white-space:nowrap}.activity-icon{flex:none;color:var(--faint);stroke-width:1.8}.event-brand{width:18px;height:18px;flex:none;display:grid;place-items:center;border-radius:5px;overflow:hidden}.event-brand-openai{color:#fff;background:#000}.event-brand-devin{background:#000;isolation:isolate}.event-brand-devin img{display:block;width:18px;height:18px;mix-blend-mode:screen}.activity-list li:first-child{padding-top:0}.activity-list li:last-child{border-bottom:0;padding-bottom:0}.education-entry{display:flex;align-items:center;justify-content:space-between;gap:18px}.education-degree{margin:0 0 3px;color:var(--text);font-size:13px;line-height:1.5}.education-institution{margin:0;color:var(--muted);font-size:11px;line-height:1.6}.education-status{padding-top:2px;color:var(--faint);font:10px/1.6 var(--mono);white-space:nowrap}@media(max-width:620px){.project-card.has-logo{grid-template-columns:34px minmax(0,1fr) auto}}@media(max-width:420px){.education-entry{display:block}.education-status{display:block;margin-top:7px}}.social-links a{display:inline-flex;align-items:center;gap:7px}.social-links svg{flex:none;color:var(--faint)}.social-links a:hover svg{color:var(--text)}.about-more{margin:13px 0 0}.skills-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:30px;row-gap:18px}.skill-group h3{margin:0 0 9px;color:var(--text);font-size:12px;font-weight:500}.skill-group ul{display:flex;flex-wrap:wrap;gap:7px 13px;list-style:none;margin:0;padding:0}.skill-group li{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:11px;line-height:1.5}.tech-logo{flex:none}.tech-logo-cloudflare{color:#f38020}.tech-logo-python{color:#3776ab}.tech-logo-typescript{color:#3178c6}.resume-download{display:inline-flex;align-items:center;gap:7px;margin-top:16px;padding:7px 10px;border:1px solid var(--line);border-radius:5px;color:var(--text);font-size:11px;line-height:1.4;text-decoration:none;transition:border-color .16s ease,background-color .16s ease}.resume-download:hover{border-color:var(--faint);background:var(--surface);color:var(--text)}.resume-download small{color:var(--faint);font:9px/1.4 var(--mono)}@media(prefers-reduced-motion:reduce){.resume-download{transition:none}}@media(max-width:420px){.skills-grid{grid-template-columns:1fr;row-gap:15px}}
