@font-face{font-family:Silkscreen;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/silkscreen-latin-400-normal.CtPo2yA5.woff2)format("woff2"),url(/_astro/silkscreen-latin-400-normal.D0DfPJut.woff)format("woff")}@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"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/space-grotesk-latin-400-normal.CJ-V5oYT.woff2)format("woff2"),url(/_astro/space-grotesk-latin-400-normal.BnQMeOim.woff)format("woff")}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/space-grotesk-latin-500-normal.lFbtlQH6.woff2)format("woff2"),url(/_astro/space-grotesk-latin-500-normal.CNSSEhBt.woff)format("woff")}:root{--paper:#f5f2e9;--ink:#273e26;--muted:#496044;--line:#b8c2a6;--screen:#d6dea9;--screen-light:#e6ebc7;--screen-mid:#6b853f;--pixel:"Silkscreen", monospace;--mono:"IBM Plex Mono", monospace;--body:"Space Grotesk", sans-serif;color-scheme:light;font-family:var(--body);color:var(--ink);background:var(--paper);font-synthesis:none}*{box-sizing:border-box}body{margin:0}a{color:inherit;text-underline-offset:.3em}button{font:inherit;color:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a:focus-visible,button:focus-visible,summary:focus-visible{outline:3px solid var(--ink);outline-offset:5px}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:400}p{line-height:1.75}p+p{margin-top:1rem}h1{font-family:var(--pixel);letter-spacing:-.06em;font-size:clamp(2rem,4.1vw,3.5rem);line-height:1.16}h2{font-family:var(--pixel);letter-spacing:-.04em;font-size:clamp(1.4rem,2.5vw,2rem);line-height:1.3}h3{font-size:1.5rem;line-height:1.35}::selection{background:var(--ink);color:var(--screen-light)}.site-shell{max-width:1120px;margin:auto;padding:0 40px}.site-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;min-height:110px;display:flex}.brand{font:1.8rem/1 var(--pixel);letter-spacing:-.08em;align-items:center;gap:14px;text-decoration:none;display:flex}.pixel-heart{flex-shrink:0;width:33px;height:27px;display:block}.pixel-heart.large{width:220px;height:160px}.arrow{vertical-align:-.15em;flex-shrink:0;display:inline-block}.site-header nav{flex-wrap:wrap;gap:26px;display:flex}.site-header nav a{align-items:center;min-height:44px;font-size:.9rem;text-decoration:none;display:flex}.site-header nav a:hover,.site-header nav a[aria-current]{text-decoration:underline}.eyebrow{font:.75rem/1.6 var(--mono);letter-spacing:.045em}.pocket-screen{border:3px solid var(--ink);box-shadow:6px 6px 0 var(--ink);background:var(--screen);margin-top:36px;padding:0 30px 28px}.screen-bar{border-bottom:2px solid var(--ink);font:.75rem/1.6 var(--mono);justify-content:space-between;align-items:center;gap:20px;padding:17px 0;display:flex}.lives{gap:9px;display:flex}.lives .pixel-heart{width:17px;height:13px}.hero{grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);align-items:center;gap:30px;padding:48px 0 38px;display:grid}.hero h1{margin:0 0 22px}.hero-copy{max-width:540px;font-size:1.1rem}.pixel-button{border:2px solid var(--ink);min-height:50px;box-shadow:3px 3px 0 var(--ink);background:var(--screen-light);font:.9rem/1.5 var(--mono);justify-content:space-between;align-items:center;gap:34px;padding:14px 18px;text-decoration:none;display:inline-flex}.hero .actions{margin-top:28px}.pixel-button:not(:disabled):hover{background:var(--ink);color:var(--screen-light)}.heart-display{text-align:center;flex-direction:column;align-items:center;padding:20px 0;display:flex}.heart-button{transform-origin:50%;background:0 0;border:0;place-items:center;padding:16px;display:grid}.heart-button:hover{transform:translateY(-4px)}.heart-shadow{background:var(--ink);opacity:.18;clip-path:polygon(10% 0,90% 0,90% 30%,100% 30%,100% 70%,90% 70%,90% 100%,10% 100%,10% 70%,0 70%,0 30%,10% 30%);width:140px;height:10px;margin:12px 0 25px}.beating{animation:.8s ease-in-out heartbeat}.section{border-bottom:1px solid var(--line);padding:42px 0}.intro{grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:50px;padding-top:54px;display:grid}.intro p:not(.eyebrow){max-width:570px;font-size:1.15rem}.text-link{padding:10px 0;font-size:.9rem;display:inline-block}.section-heading{justify-content:space-between;align-items:center;gap:24px;margin-bottom:26px;display:flex}.contact-strip{justify-content:space-between;align-items:center;gap:25px;padding:46px 0;display:flex}.contact-strip h2{margin-top:12px}.site-footer{border-top:1px solid var(--line);font:.75rem/1.6 var(--mono);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;padding:24px 0 32px;display:flex}.footer-mark{align-items:center;gap:10px;text-decoration:none;display:flex}.footer-mark .pixel-heart{width:17px;height:13px}.skip-link{background:var(--ink);color:var(--paper);z-index:10;padding:12px;position:absolute;top:10px;left:10px;transform:translateY(-150%)}.skip-link:focus{transform:none}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.page-heading{border-bottom:2px solid var(--ink);padding:50px 0 30px}.page-heading h1{max-width:900px;margin:18px 0 24px;font-size:clamp(2rem,4vw,3rem)}.page-heading>p:not(.eyebrow){max-width:680px;font-size:1.15rem}.back-link{font:.8rem/1.5 var(--mono);margin-bottom:30px;display:inline-block}.content-section{padding:36px 0 48px}.prose{max-width:740px;font-size:1.1rem;line-height:1.8}.prose h2{margin:32px 0 16px;font-size:1.5rem}.prose ul{padding-left:24px}.hero-role{max-width:450px;font:1.5rem/1.4 var(--body);letter-spacing:-.02em;margin-top:16px;display:block}.actions{flex-wrap:wrap;align-items:center;gap:18px 24px;display:flex}.pixel-button:disabled{color:var(--muted);border-color:var(--line);box-shadow:none;cursor:default;background:0 0}.capabilities{grid-template-columns:repeat(3,minmax(0,1fr));gap:32px;display:grid}.capability{border-top:2px solid var(--ink);padding-top:18px}.capability h3{margin:10px 0 14px}.contact-panel,.cv-panel{border:2px solid var(--ink);background:var(--screen-light);justify-content:space-between;align-items:center;gap:28px;padding:30px;display:flex}.contact-panel{margin-top:42px;scroll-margin-top:24px}.contact-panel>div:first-child{max-width:660px}.contact-panel h2,.cv-panel h2{margin-bottom:16px}.contact-panel .actions,.contact-strip .actions,.cv-panel .actions{flex-shrink:0}.location,.placeholder-note,.cv-panel p{color:var(--muted);font-size:.95rem}.beyond-software{border-bottom:0}.footer-contact{flex-wrap:wrap;gap:12px 24px;display:flex}.footer-contact a{overflow-wrap:anywhere}.cv-panel{margin-top:36px}.cv-panel .pixel-button{justify-content:center}.experience-list{margin-top:28px}.experience-entry{border-top:1px solid var(--line);grid-template-columns:170px minmax(0,1fr);gap:24px;padding:24px 0;display:grid}.experience-entry:last-child{padding-bottom:0}.experience-entry h3{margin-bottom:10px}.experience-entry p:not(.eyebrow){max-width:620px;color:var(--muted)}.project-story{border:1px solid var(--line);padding:0 24px}.project-story summary{cursor:pointer;text-underline-offset:.3em;padding:20px 0;text-decoration:underline}.project-story .prose{padding:4px 0 24px}.page-actions{padding:28px 0 42px}.printing-example{border:2px solid var(--ink);background:var(--screen-light);padding:32px}.printing-example h2{margin:14px 0 24px}.contact-strip>div:first-child{max-width:720px}.contact-strip p{margin-top:16px}@keyframes heartbeat{0%,to{transform:scale(1)}20%,60%{transform:scale(.89)}35%,75%{transform:scale(1.07)}}@media (width<=760px){.site-shell{padding:0 22px}.site-header{flex-wrap:wrap;gap:18px;padding:23px 0}.site-header nav{gap:22px}.hero{gap:20px}.hero h1{font-size:2.1rem}.pixel-heart.large{width:165px;height:120px}.pocket-screen{padding:0 20px 22px}.intro{gap:30px}.capabilities{grid-template-columns:1fr;gap:28px}.contact-panel,.cv-panel{flex-direction:column;align-items:flex-start}.section-heading{flex-wrap:wrap;gap:10px}}@media (width<=540px){.site-shell{padding:0 18px}.brand{font-size:1.55rem}.site-header{gap:14px}.site-header nav{justify-content:space-between;gap:18px;width:100%}.site-header nav a{font-size:.85rem}.pocket-screen{box-shadow:4px 4px 0 var(--ink);margin-top:26px;padding:0 16px 20px}.screen-bar{gap:14px;font-size:.75rem}.lives{gap:5px}.lives .pixel-heart{width:11px;height:8px}.hero{grid-template-columns:1fr;gap:12px;padding:30px 0 24px}.hero h1{font-size:clamp(1.75rem,7.7vw,2.5rem)}.hero-copy{font-size:1rem}.heart-display{padding:14px 0 6px}.pixel-heart.large{width:132px;height:96px}.heart-shadow{width:88px;height:7px;margin:4px 0 14px}.intro,.capabilities,.experience-entry{grid-template-columns:1fr;gap:24px}.intro{padding-top:42px}.section{padding-bottom:32px}.contact-strip,.contact-panel,.cv-panel{flex-direction:column;align-items:flex-start;padding:34px 0}.site-footer{flex-direction:column;align-items:flex-start;gap:14px}.page-heading{padding-top:30px}.page-heading h1{overflow-wrap:anywhere;font-size:1.9rem}.prose{font-size:1rem}.contact-panel,.cv-panel,.printing-example{padding:24px 20px}.cv-panel .actions,.experience-entry{gap:12px}.hero .pixel-button{gap:12px;font-size:.85rem}.hero-role{font-size:1.3rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;animation:none!important}.heart-button:hover{transform:none}}
