@font-face{font-family:Geist;src:url('./geist-latin.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
:root{color-scheme:light dark;--bg:#faf9f6;--ink:#282824;--muted:#686861;--faint:#74746d;--line:#deded7;--accent:#954a35;--soft:#f0eee8;--sans:Geist,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--mono:ui-monospace,SFMono-Regular,Consolas,monospace}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){--bg:#141513;--ink:#eeede7;--muted:#aaa9a1;--faint:#98988e;--line:#33352e;--accent:#dca58e;--soft:#1e201b}}
:root[data-theme="dark"]{--bg:#141513;--ink:#eeede7;--muted:#aaa9a1;--faint:#98988e;--line:#33352e;--accent:#dca58e;--soft:#1e201b;color-scheme:dark}
:root[data-theme="light"]{color-scheme:light}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:40px}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.6 var(--sans);font-synthesis:none;-webkit-font-smoothing:antialiased}::selection{background:var(--accent);color:var(--bg)}p,h1,h2,h3,h4{margin:0}p+p{margin-top:5px}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:4px}a:hover{color:var(--accent)}button{font:inherit;color:inherit}button,a,summary{touch-action:manipulation;-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px;border-radius:2px}svg{width:14px;height:14px;vertical-align:-2px;flex-shrink:0}[hidden]{display:none!important}.shell{width:min(100% - 56px,704px);margin:0 auto;padding-top:64px}.skip-link{position:fixed;left:20px;top:-100px;background:var(--ink);color:var(--bg);padding:8px 16px;z-index:10}.skip-link:focus{top:12px}
.header{display:flex;justify-content:space-between;gap:24px;align-items:flex-start}.identity h1{font-size:31px;line-height:1.15;font-weight:580;letter-spacing:-1.2px}.identity h1 a{text-decoration:none}.identity h1 a:hover{color:inherit}.identity-line{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:12px;color:var(--muted);margin-top:9px}.identity-line .dot{font-size:9px;color:var(--accent)}.icon-button{border:0;background:transparent;width:32px;height:32px;border-radius:50%;padding:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted);margin-top:1px}.icon-button:hover{background:var(--soft);color:var(--ink)}.sun{display:none}:root[data-theme="dark"] .sun{display:block}:root[data-theme="dark"] .moon{display:none}@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .sun{display:block}:root:not([data-theme="light"]) .moon{display:none}}
.hero{margin-top:23px}.intro{font-size:16px;line-height:1.65;letter-spacing:-.15px;max-width:655px}.about{font-size:14px;color:var(--muted);margin-top:10px}.hero-links{display:flex;align-items:center;flex-wrap:wrap;gap:8px 22px;margin-top:18px}.hero-links a{font-size:12px;text-decoration:none;color:var(--muted)}.hero-links a:hover{color:var(--accent)}.hero-links a svg{width:11px;height:11px;margin-left:3px}.hero-links .resume-link{color:var(--ink)}.skills{display:flex;align-items:center;flex-wrap:wrap;gap:5px 15px;margin-top:21px;font-size:11px;color:var(--muted)}.skills span{white-space:nowrap}.skills span::before{content:"";display:inline-block;width:4px;height:4px;vertical-align:2px;border-radius:1px;background:var(--accent);margin-right:7px;opacity:.8}.skills span:nth-child(n+3)::before{background:var(--faint);opacity:.6}
.section{margin-top:42px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:19px}.section-label{font:500 10px/1.6 var(--sans);text-transform:uppercase;letter-spacing:1.5px;color:var(--faint)}.section-head>a{font-size:11px;color:var(--faint);text-decoration:none}.section-head>a:hover{color:var(--accent)}.section-head>a svg{width:10px;height:10px;margin-left:3px}
.experience-row{display:grid;grid-template-columns:106px minmax(0,1fr);gap:16px}.experience-row+.experience-row{margin-top:24px}.period{font:10px/1.7 var(--mono);color:var(--faint);padding-top:3px;letter-spacing:-.3px}.job-title{display:flex;align-items:baseline;flex-wrap:wrap;gap:3px 7px;line-height:1.55}.job h3{font-size:14px;font-weight:550;letter-spacing:-.12px}.employer{font-size:13px;color:var(--muted)}.employer::before{content:"·";margin-right:7px;color:var(--faint)}.context{font-size:11px;color:var(--faint);margin-top:2px}.job-description{font-size:13px;line-height:1.65;color:var(--muted);margin-top:6px}.role-details{margin-top:6px}.role-details .project-detail{font-size:12px}.deployment{font-size:11px;color:var(--muted);margin-bottom:10px}ul{padding-left:17px;margin:0}li+li{margin-top:7px}
.project{display:grid;grid-template-columns:20px minmax(0,1fr);gap:12px}.project+.project{margin-top:24px}.project-symbol{width:19px;height:19px;margin-top:2px;color:var(--accent)}.project-symbol svg{width:19px;height:19px}.project-heading{display:flex;gap:12px;align-items:baseline}.project h3{font-size:14px;font-weight:550;letter-spacing:-.12px;line-height:1.5}.project h3 a{text-decoration:none}.project h3 a svg{width:11px;height:11px;color:var(--faint);margin-left:5px}.project h3 a:hover svg{color:var(--accent)}.project-copy>p{font-size:13px;line-height:1.65;color:var(--muted);margin-top:5px;max-width:630px}.tags{display:flex;gap:5px 11px;align-items:center;flex-wrap:wrap;margin-top:8px;font-size:10px;color:var(--faint)}.project-type{color:var(--accent)}.project-type::before{content:"·";margin-right:9px;color:var(--faint)}details{margin-top:9px}summary{display:flex;align-items:center;gap:5px;list-style:none;cursor:pointer;font-size:11px;width:fit-content;color:var(--muted);padding:3px 0}summary:hover{color:var(--accent)}summary::-webkit-details-marker{display:none}summary::before{content:"+";font:13px var(--mono);width:12px;color:var(--accent)}details[open]>summary::before{content:"−"}.project-detail{border-left:1px solid var(--line);padding-left:15px;margin-top:11px;font-size:12px;line-height:1.7;color:var(--muted)}.project-detail h4{font-size:11px;font-weight:550;color:var(--ink);margin:12px 0 4px}.project-detail h4:first-child{margin-top:0}
.writing-row{display:grid;grid-template-columns:106px minmax(0,1fr);gap:16px}.writing-row+.writing-row{margin-top:17px}.note-kind{font:10px/1.7 var(--mono);color:var(--faint);padding-top:3px}.writing-row h3{font-size:13px;font-weight:500;line-height:1.55;letter-spacing:-.08px}.writing-row a{text-decoration:none}.writing-row a:hover{text-decoration:underline}.writing-row h3 svg{color:var(--faint);width:10px;height:10px;margin-left:5px}.writing-row p{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.65}
.credentials-section{padding-top:25px;border-top:1px solid var(--line);margin-top:34px}.credential{display:grid;grid-template-columns:106px minmax(0,1fr);gap:16px;align-items:baseline}.credential+.credential{margin-top:13px}.credential-year{font:10px/1.7 var(--mono);color:var(--faint)}.credential a{font-size:12px;font-weight:450;text-decoration:none;line-height:1.65}.credential a:hover{text-decoration:underline}.credential a svg{width:10px;height:10px;color:var(--faint);margin-left:4px}.credential p{font-size:10px;color:var(--faint);margin-top:2px}.credential .credential-mark{display:inline-flex;margin-right:6px;color:var(--accent);vertical-align:-3px}.credential-mark svg{width:13px;height:13px}.education-details{margin-top:17px;margin-left:122px}.education-details>summary{font-size:11px}.education{display:grid;grid-template-columns:1fr 1fr;gap:15px;padding:10px 0 2px}.education h3{font-size:11px;font-weight:500;line-height:1.6}.education p{font-size:10px;color:var(--muted);margin-top:3px}
.personal{display:grid;grid-template-columns:106px minmax(0,1fr);gap:16px;margin-top:32px}.personal h2{font-size:10px;font-weight:450;color:var(--faint);padding-top:3px}.personal p{font-size:12px;line-height:1.8;color:var(--muted)}.personal a{display:inline-block;font-size:11px;margin-top:7px;text-decoration:none;color:var(--accent)}.personal a svg{width:10px;height:10px}
.contact{margin-top:34px;padding-top:23px;border-top:1px solid var(--line);display:flex;align-items:baseline;justify-content:space-between;gap:16px}.contact h2{font-size:14px;font-weight:500;letter-spacing:-.2px}.contact p{font-size:11px;color:var(--muted);margin-top:4px;max-width:330px}.email-line{display:flex;align-items:center;gap:6px;flex-wrap:nowrap}.email-line>a{font-size:12px;text-decoration:none;white-space:nowrap}.email-line>a:hover{text-decoration:underline}.copy{border:0;background:transparent;padding:7px;cursor:pointer;color:var(--faint);display:flex;align-items:center}.copy:hover{color:var(--accent)}.copy svg{width:12px;height:12px}#copy-status{height:16px;font-size:10px;color:var(--accent);text-align:right}.footer{display:flex;justify-content:space-between;align-items:center;gap:15px;font-size:10px;color:var(--faint);padding:17px 0 35px}.footer a{color:var(--faint);text-decoration:none}.footer a:hover{color:var(--accent)}
@media(min-width:1000px){.shell{padding-top:76px}.section{margin-top:46px}.section-head{margin-bottom:20px}.credentials-section{margin-top:37px}.identity h1{font-size:32px}.hero{margin-top:24px}}
@media(max-width:600px){.shell{width:calc(100% - 40px);padding-top:34px}.identity h1{font-size:28px;letter-spacing:-1px}.identity-line{font-size:11px;gap:7px}.intro{font-size:14px;line-height:1.7}.hero{margin-top:20px}.hero-links{gap:10px 18px;margin-top:15px}.skills{gap:7px 13px;margin-top:19px;font-size:10px}.section{margin-top:33px}.section-head{margin-bottom:17px}.experience-row,.writing-row,.credential{grid-template-columns:83px minmax(0,1fr);gap:13px}.job h3{font-size:13px}.job-title{display:block}.employer{display:block;font-size:12px;margin-top:1px}.employer::before{display:none}.job-description{font-size:12px}.context{font-size:10px;line-height:1.6}.period{font-size:9px;line-height:1.8}.project h3{font-size:13px}.project-copy>p{font-size:12px}.project{gap:10px}.project+.project{margin-top:22px}.tags{font-size:9px;gap:4px 9px}.writing-row h3{font-size:12px}.writing-row p{font-size:11px}.note-kind{font-size:9px}.credential a{font-size:11px}.credential p{font-size:9px}.credential-year{font-size:9px}.credentials-section{margin-top:29px;padding-top:21px}.education-details{margin-left:96px}.education{grid-template-columns:1fr;gap:12px}.personal{grid-template-columns:83px minmax(0,1fr);gap:13px;margin-top:27px}.personal h2{font-size:9px}.personal p{font-size:11px}.personal a{font-size:10px}.contact{display:block;margin-top:28px;padding-top:20px}.contact h2{font-size:14px}.contact p{font-size:11px;max-width:none}.email-line{margin-top:11px}.email-line>a{font-size:12px}#copy-status{text-align:left}.footer{font-size:9px;padding-bottom:25px}}
@media(max-width:360px){.shell{width:calc(100% - 32px)}.experience-row,.writing-row,.credential,.personal{grid-template-columns:1fr;gap:5px}.job-title{display:flex;flex-wrap:wrap}.employer{display:inline}.employer::before{display:inline}.education-details{margin-left:0}.period{font-size:10px}}
@media(min-width:900px){.work-and-notes{display:grid;grid-template-columns:1.1fr 1fr;gap:40px}.work-and-notes .section-head{min-height:19px;gap:12px}.work-and-notes .section-head>a{font-size:10px}.work-and-notes .writing-row{grid-template-columns:1fr;gap:4px}.work-and-notes .writing-row+.writing-row{margin-top:24px}.work-and-notes .note-kind{font-size:10px}.work-and-notes .project-copy>p{font-size:12px}.work-and-notes .project h3{font-size:13px}.work-and-notes .tags{font-size:9px;gap:4px 9px}.work-and-notes .writing-row h3{font-size:13px}.work-and-notes .writing-row p{font-size:12px}}
.identity-line{column-gap:14px}.identity-location{display:inline-flex;align-items:center;gap:5px}.identity-location svg{width:12px;height:12px;color:var(--faint)}.hero-links a{display:inline-flex;align-items:center;gap:6px}.hero-links a svg{width:13px;height:13px;margin-left:0}.profile-logo{display:block;width:13px;height:13px;object-fit:contain}.skills{gap:9px 18px}.skills .skill{display:inline-flex;align-items:center;gap:6px;line-height:18px}.skills .skill::before{display:none}.technology-logo,.skill>svg{display:block;width:15px;height:15px;object-fit:contain}.skill>svg{color:var(--muted);width:14px;height:14px}.job-impact{display:flex;align-items:baseline;flex-wrap:wrap;gap:3px 7px;margin-top:8px!important;line-height:1.6}.job-impact strong{font-size:14px;font-weight:600;color:var(--accent);letter-spacing:-.3px}.job-impact span{font-size:11px;color:var(--muted)}.project h3 a svg{transition:transform 140ms ease}.project h3 a:hover svg{transform:translate(1px,-1px)}:root[data-theme="dark"] .github-logo{filter:invert(1)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .github-logo{filter:invert(1)}}
@media(min-width:361px) and (max-width:600px){.skills{display:grid;grid-template-columns:repeat(4,max-content);column-gap:16px;row-gap:9px}}
@media(max-width:600px){.skills{gap:9px 15px}.skills .skill{gap:5px}.technology-logo,.skill>svg{width:14px;height:14px}.identity-line{column-gap:11px}.identity-location svg{width:11px;height:11px}.job-impact strong{font-size:13px}.job-impact span{font-size:10px}}
.hero-links{margin-top:0;margin-bottom:19px}.hero .about{margin-top:11px;line-height:1.7}.hero .skills{margin-top:23px}
main>.section,.work-and-notes,.credentials-section,.personal,.contact{margin-top:32px;padding-top:24px;border-top:1px solid var(--line)}.work-and-notes>.section{margin-top:0;padding-top:0;border-top:0}.work-and-notes>.section+.section{margin-top:32px;padding-top:24px;border-top:1px solid var(--line)}
@media(min-width:900px){.work-and-notes>.section+.section{margin-top:0;padding-top:0;border-top:0}}
@media(max-width:600px){.hero-links{margin-top:0;margin-bottom:18px}.hero .about{font-size:12px}.hero .skills{margin-top:21px}main>.section,.work-and-notes,.credentials-section,.personal,.contact{margin-top:28px;padding-top:21px}.work-and-notes>.section+.section{margin-top:28px;padding-top:21px}}
.email-display{position:relative;display:inline-flex;align-items:center;gap:2px;white-space:nowrap}.email-address{user-select:all;cursor:text}.identity-line .email-address{font-size:11px}.email-display .copy{padding:5px;min-width:24px;min-height:24px}.copy-feedback{position:absolute;top:100%;right:0;font-size:10px;line-height:1.5;color:var(--accent);white-space:nowrap}.contact-email{font-size:12px}.identity{min-width:0}.contact-email .email-address{font-size:12px}
@media(max-width:600px){.identity-line{row-gap:4px}.identity-line .email-address{font-size:10px}.identity-line .email-display{margin-left:-1px}.contact-email{margin-top:11px}.copy-feedback{font-size:9px}}
.credential-mark img{display:block;width:16px;height:16px;object-fit:contain}.education-list{margin-top:26px}.education-heading{margin:0 0 17px 122px;font-size:11px;font-weight:500;color:var(--muted)}.education-row{display:grid;grid-template-columns:106px minmax(0,1fr);gap:16px}.education-row+.education-row{margin-top:18px}.school{display:flex;align-items:flex-start;gap:11px;min-width:0}.institution-mark{display:flex;align-items:center;justify-content:center;width:28px;height:28px;flex:0 0 28px;background:transparent;border:0;border-radius:0;padding:0}.institution-mark img{display:block;max-width:100%;max-height:100%;width:24px;height:24px;object-fit:contain}.school-copy{min-width:0}.school-copy h4{font-size:12px;font-weight:500;line-height:1.6}.school-copy p{font-size:11px;line-height:1.6;color:var(--muted);margin-top:2px}.school-copy .qualification{font-size:10px;color:var(--faint);margin-top:1px}
@media(max-width:600px){.education-list{margin-top:23px}.education-heading{margin-left:96px;margin-bottom:15px}.education-row{grid-template-columns:83px minmax(0,1fr);gap:13px}.school{gap:9px}.institution-mark{width:26px;height:26px;flex-basis:26px}.institution-mark img{width:22px;height:22px}.school-copy h4{font-size:11px}.school-copy p{font-size:10px}.school-copy .qualification{font-size:9px}}
@media(max-width:360px){.education-heading{margin-left:0}.education-row{grid-template-columns:1fr;gap:7px}}
@media print{.email-display .copy,.copy-feedback{display:none}.education-row{break-inside:avoid}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.project h3 a svg{transition:none}}
@media print{:root,:root[data-theme="dark"]{--bg:#fff;--ink:#111;--muted:#444;--faint:#555;--line:#ccc;--accent:#333;--soft:#f4f4f4;color-scheme:light}.shell{padding-top:0;width:100%;max-width:none}.icon-button,.copy,.footer>a,.skip-link{display:none}.section{margin-top:24px}.project,.experience-row,.credential,.personal{break-inside:avoid}.intro{font-size:14px}.contact{margin-top:22px}a{text-decoration:none}}

.school-course-link{text-decoration:none}.school-course-link:hover{text-decoration:underline}.school-course-link svg{width:9px;height:9px;margin-left:4px;color:var(--faint)}

.project-animation{margin:15px 0 2px}.project-animation>a{display:block;border-radius:4px;overflow:hidden}.project-animation img{display:block;width:100%;height:auto;aspect-ratio:1280/456;background:#101512}.project-animation figcaption{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-top:6px;font-size:9px;color:var(--faint)}.project-animation figcaption a{text-decoration:none}.project-animation figcaption a:hover{text-decoration:underline}.project-animation figcaption svg{width:8px;height:8px;margin-left:3px}.project-animation button{border:0;background:transparent;color:var(--muted);font-size:9px;cursor:pointer;padding:3px 0;text-decoration:underline;text-underline-offset:3px}.project-animation button:hover{color:var(--accent)}
@media print{.project-animation{break-inside:avoid}.project-animation button{display:none}}
