@charset "UTF-8";
:root{--ink:#141713;--paper:#f6f7f3;--muted:#555d51;--line:#d5dacd;--lime:#c5f564;--dark-line:#3a4035;--soft:#aeb6a7;font-family:Arial,Helvetica,sans-serif;color:var(--ink);background:var(--paper);font-synthesis:none;scroll-behavior:smooth}
*{box-sizing:border-box}body{margin:0}a{color:inherit;text-underline-offset:5px}button{font:inherit}a,button,summary{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,summary:focus-visible{outline:3px solid #678c21;outline-offset:6px}::selection{background:var(--lime);color:var(--ink)}.wrap{padding-inline:clamp(24px,6.3vw,112px);margin-inline:auto;max-width:1800px}.skip-link{position:fixed;top:-100px;left:20px;background:var(--lime);padding:14px;z-index:99}.skip-link:focus{top:12px}.site-header{display:flex;align-items:center;gap:48px;height:100px;background:var(--ink);color:var(--paper)}.wordmark{font-size:2rem;font-weight:800;letter-spacing:-2px;text-decoration:none}.wordmark span{color:var(--lime)}nav{display:flex;gap:28px;margin-left:auto}nav a{font-size:.875rem;text-decoration:none}nav a:hover{text-decoration:underline}.header-note{font-family:Consolas,monospace;font-size:.75rem;letter-spacing:.06em;color:var(--soft)}.hero{background:var(--ink);color:var(--paper);padding-top:38px;padding-bottom:68px}.hero-topline{border-top:1px solid var(--dark-line);padding-top:24px;display:flex;justify-content:space-between;gap:24px;font: .75rem/1.5 Consolas,monospace;letter-spacing:.08em;color:var(--soft)}h1{font-size:clamp(4.25rem,10.1vw,10.5rem);font-weight:500;letter-spacing:-.067em;line-height:.99;margin:56px 0 48px}.accent{color:var(--lime)}.hero-bottom{display:grid;grid-template-columns:1.6fr 1fr;gap:12%;align-items:end}.eyebrow{font: .75rem/1.5 Consolas,monospace;letter-spacing:.08em}.intro>.eyebrow{color:var(--lime)}.intro>p:not(.eyebrow){font-size:1.32rem;line-height:1.5;max-width:560px;color:#d8ddd2;margin-bottom:28px}.button{display:inline-flex;align-items:center;justify-content:center;gap:38px;padding:17px 22px;border:1px solid transparent;font-size:.875rem;font-weight:600;text-decoration:none;cursor:pointer;min-height:48px}.button:hover{filter:brightness(.93)}.primary{background:var(--lime);color:var(--ink)}.hero-aside{border-left:1px solid var(--dark-line);padding-left:28px;max-width:350px}.hero-aside>.eyebrow{color:var(--soft)}.hero-aside>p:not(.eyebrow){font-size:1.125rem;line-height:1.5}.aside-foot{border-top:1px solid var(--dark-line);padding-top:18px;margin-top:25px;display:flex;justify-content:space-between;gap:24px;font-size:.875rem}.aside-foot span{color:var(--soft)}.section{padding-block:100px;scroll-margin-top:28px}.profile{display:grid;grid-template-columns:1fr 2.3fr;gap:60px}.section-label{font:.75rem/1.6 Consolas,monospace;letter-spacing:.08em;padding-top:10px}h2{font-size:clamp(2.1rem,4vw,4rem);font-weight:500;line-height:1.1;letter-spacing:-.05em;margin:0 0 30px}.large-copy{font-size:1.35rem;line-height:1.5;max-width:780px}.body-copy{font-size:1rem;line-height:1.75;max-width:720px;color:var(--muted)}footer{display:flex;align-items:center;justify-content:space-between;gap:30px;min-height:125px;border-top:1px solid var(--line);font-size:.875rem}footer .wordmark span{color:#648b24}footer>span{color:var(--muted)}
@media(min-width:1800px){body{max-width:1800px;margin:auto;border-inline:1px solid var(--line);background:var(--paper)}}
@media(max-width:800px){.header-note{display:none}.site-header{height:82px}.hero{padding-top:20px;padding-bottom:50px}h1{margin-block:44px;font-size:clamp(3.7rem,11.5vw,6rem)}.hero-bottom{gap:35px}.hero-aside{padding-left:22px}.section{padding-block:65px}.profile{grid-template-columns:1fr;gap:26px}footer>span{display:none}}
@media(max-width:520px){.site-header{gap:20px}nav{gap:18px}.hero-topline{font-size:.75rem;letter-spacing:0;gap:15px}.hero-topline span:last-child{max-width:110px;text-align:right}.hero-bottom{grid-template-columns:1fr}.hero-aside{border-left:0;border-top:1px solid var(--dark-line);padding:18px 0 0;max-width:none}.hero-aside>p:not(.eyebrow){font-size:1rem}.hero-aside>p:not(.eyebrow) br{display:none}.hero-aside>p:not(.eyebrow) br:after{content:' '}.aside-foot{margin-top:18px}.intro>p:not(.eyebrow){font-size:1.15rem}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}}
.header-cv{text-decoration:none}
.project-artifact{margin:0 0 24px}.artifact-link{display:block;aspect-ratio:900/570;overflow:hidden;border:1px solid var(--line);background:#edf1e7}.artifact-link img{display:block;width:100%;height:100%;object-fit:cover;object-position:top}.artifact-link.architecture img{object-fit:contain}.artifact-link:hover{outline:2px solid #738e53;outline-offset:2px}.project-artifact figcaption{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 14px;margin-top:12px;font-size:.875rem;line-height:1.5;color:var(--muted)}.project-artifact figcaption a{color:var(--ink);white-space:nowrap}.email-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}.email-row .email{min-width:0}.copy-email{border:1px solid #557225;background:transparent;color:var(--ink);padding:10px 12px;min-height:44px;min-width:72px;font-size:.875rem;cursor:pointer;border-radius:3px}.copy-email:hover{background:#b3e051}.copy-email[hidden]{display:none}.copy-status{min-height:1.5em;line-height:1.5;font-size:.875rem;margin:6px 0 0;color:#34491b}.contact .phone{margin-top:5px}.social-link{display:flex;width:fit-content;align-items:center;gap:11px;min-height:44px;font-size:1rem;margin-top:16px;text-decoration:none}.social-link:hover{text-decoration:underline}.linkedin-mark{background:var(--ink);color:var(--lime);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:.875rem;width:23px;height:23px;border-radius:2px;font-family:Arial,sans-serif}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.header-cv{background:transparent;color:var(--paper);border:1px solid #656f5b;padding:12px 16px;display:flex;gap:25px;font-size:.875rem;cursor:pointer}.header-cv:hover{background:var(--lime);color:var(--ink);border-color:var(--lime)}.aside-foot{font-size:.8rem}.aside-foot span{text-align:right;max-width:155px}.stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;border-top:1px solid var(--line);padding-top:30px;margin-top:40px}.stats strong{display:block;font-size:3.25rem;font-weight:500;letter-spacing:-.05em;margin-bottom:14px}.stats span{font-size:.875rem;line-height:1.5;color:var(--muted)}.work{padding-top:80px;background:#e9ede3}.section-heading{display:flex;justify-content:space-between;gap:40px;align-items:end;margin-bottom:36px}.section-heading h2{margin-bottom:0}.section-heading .section-label{padding-top:0;margin:0 0 22px}.section-note{font-size:.875rem;line-height:1.6;color:var(--muted);margin:0}.work-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}.project{padding:32px;display:flex;flex-direction:column;min-width:0}.project-featured{background:var(--ink);color:var(--paper)}.project-light{background:var(--lime)}.project-personal{background:var(--paper);border:1px solid var(--line)}.project-top{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-bottom:44px}.project-top .eyebrow{margin:0;font-size:.75rem}.project-status{font:.65rem/1.5 Consolas,monospace;letter-spacing:.04em;border:1px solid currentColor;padding:5px 7px}.project-featured .project-top{color:var(--lime)}.project h3{font-size:2.1rem;font-weight:500;letter-spacing:-.04em;line-height:1.15;margin:0 0 18px}.project>p{font-size:1rem;line-height:1.6;max-width:510px;margin:0 0 28px}.project-featured>p{color:#c6cfbe}.system-flow{display:grid;grid-template-columns:1fr 16px 1fr 16px 1fr;align-items:center;gap:5px;margin:12px 0 35px;min-height:75px}.system-flow>span{border:1px solid #556446;padding:14px 9px;font-size:.8rem;line-height:1.5;text-align:center;min-height:72px}.system-flow small{display:block;font: .65rem/1.6 Consolas,monospace;color:var(--lime);margin-bottom:6px;letter-spacing:.04em}.system-flow i{font-style:normal;color:var(--lime);text-align:center}.foundation-list{display:grid;gap:0;margin:0 0 32px;font-size:.875rem}.foundation-list span{border-top:1px solid #a8d253;padding:12px 0}.foundation-list span:last-child{border-bottom:1px solid #a8d253}.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto;margin-bottom:24px}.tags span{font-size:.75rem;line-height:1.3;border:1px solid #b3bca9;border-radius:2px;padding:7px 9px}.project-featured .tags span{border-color:#4d5941;color:#d6dfcf}.project-light .tags span{border-color:#9bbf56}.project-caption{font-size:.875rem;line-height:1.5;color:var(--muted);border-left:2px solid #8fba49;padding:10px 0 10px 15px;margin:0 0 30px}details{border-top:1px solid #b7c0ac}summary{list-style:none;display:flex;align-items:center;justify-content:space-between;font-size:.875rem;font-weight:600;cursor:pointer;padding:18px 0 0;min-height:44px;gap:20px}summary::-webkit-details-marker{display:none}.detail-icon{font-size:1.45rem;font-weight:400;line-height:1;transition:transform .15s}details[open] .detail-icon{transform:rotate(45deg)}.detail-content{font-size:.9375rem;line-height:1.65;padding-top:5px}.detail-content p:last-child{margin-bottom:0}.project-featured details{border-color:#4d5941}.project-featured .detail-content{color:#c6cfbe}.project-note{font-size:.8rem;color:var(--soft)}.experience{display:grid;grid-template-columns:1fr 1.65fr;gap:80px}.experience>div>.body-copy{font-size:.9rem}.timeline article{position:relative;border-left:1px solid var(--line);padding:0 0 42px 32px}.timeline article:before{content:'';position:absolute;top:4px;left:-4px;width:7px;height:7px;background:var(--ink)}.timeline article:first-child:before{background:#81b329;box-shadow:0 0 0 5px #e5efd7}.timeline article:last-child{padding-bottom:0}.timeline-date{font:.75rem/1.5 Consolas,monospace;letter-spacing:.025em;color:var(--muted);margin-bottom:13px}.timeline h3{font-size:1.55rem;font-weight:500;letter-spacing:-.025em;line-height:1.25;margin:0 0 9px}.timeline .role-location{font-size:.875rem;color:#3d4c31;margin:0 0 17px}.timeline p:not(.role-location){font-size:1rem;color:var(--muted);line-height:1.65;margin:0 0 20px}.timeline .tags{margin-top:16px;margin-bottom:0}.role-secondary{font-size:1.2rem;color:var(--muted)}.expertise{border-top:1px solid var(--line)}.skills-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:30px;margin-top:50px}.skills-grid>div{border-top:1px solid var(--line);padding-top:20px}.skill-number{font:.75rem Consolas,monospace;color:var(--muted)}.skills-grid h3{font-size:1.125rem;font-weight:600;margin-top:22px}.skills-grid p{font-size:1rem;line-height:1.9;color:var(--muted)}.principle{background:var(--ink);color:var(--paper);display:grid;grid-template-columns:1fr 2.3fr;gap:60px}.principle>.section-label{color:var(--soft)}.principle h2{font-size:clamp(2rem,3.5vw,3.7rem)}.principle h2 span{color:var(--lime)}.principle p:not(.section-label){color:#c6cfbe;line-height:1.8;font-size:1rem;max-width:730px}.education{display:grid;grid-template-columns:1fr 2.3fr;gap:60px}.education h2{font-size:2.2rem;margin-bottom:20px}.education p:not(.section-label){line-height:1.6;color:var(--muted)}.education .degree{margin-bottom:0}.education .degree+p{margin-top:5px}.languages{display:flex;gap:32px;margin-top:30px;font-size:.875rem}.languages span{display:flex;gap:12px}.languages b{color:var(--muted);font-weight:400}.contact{background:var(--lime);display:grid;grid-template-columns:1.2fr 1fr;gap:70px;align-items:center}.contact h2{font-size:clamp(2.75rem,4.5vw,5rem);margin-bottom:0}.contact h2 span{color:#63852c}.contact-info{min-width:0}.contact .email{font-size:clamp(1rem,1.6vw,1.55rem);letter-spacing:-.02em;line-height:1.5;display:block;overflow-wrap:anywhere;text-decoration:none}.contact .email:hover{text-decoration:underline}.contact .email span{margin-left:10px}.contact .phone{display:block;width:fit-content;margin-top:18px;font-size:1rem;text-decoration:none}.contact .phone:hover{text-decoration:underline}.contact .button{background:var(--ink);color:var(--paper);margin-top:30px}.print-cv{display:none}.project-status,.system-flow small{font-size:.75rem}
@media(max-width:1100px){.experience{gap:45px;grid-template-columns:1fr 1.5fr}.project{padding:25px}.project-top{margin-bottom:32px}.project h3{font-size:1.8rem}.system-flow{grid-template-columns:1fr;gap:8px}.system-flow>span{min-height:auto;padding:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}.system-flow small{margin:0}.system-flow i{display:none}.skills-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.contact{gap:40px}.header-cv{gap:15px}}
@media(max-width:800px){.site-header{gap:20px}.header-cv{padding:10px}.work-grid{gap:16px}.profile,.principle,.education{grid-template-columns:1fr;gap:25px}.experience{grid-template-columns:1fr;gap:42px}.section-heading{gap:20px;align-items:start}.section-note{max-width:180px}.contact{grid-template-columns:1fr;gap:35px}.stats strong{font-size:2.65rem}.project-top{gap:10px}.project-status{max-width:100%;font-size:.75rem}.project h3{overflow-wrap:anywhere}.contact .email{font-size:1.5rem}}
@media(max-width:600px){nav{gap:16px}nav a{font-size:.8125rem}.header-cv{display:none}.hero-aside>p:not(.eyebrow) br{display:block}.work-grid{grid-template-columns:1fr}.project{padding:26px}.section-heading{display:block}.section-note{max-width:none;margin-top:20px}.stats{gap:15px}.stats strong{font-size:2.5rem}.stats span{font-size:.8125rem}.stats span br{display:none}.skills-grid{grid-template-columns:1fr;gap:15px;margin-top:35px}.skills-grid p{line-height:1.7}.skills-grid h3{margin-top:15px}.timeline article{padding-left:24px}.languages{flex-wrap:wrap;gap:20px}.contact .email{font-size:1.15rem}.contact .button{font-size:.8125rem}.system-flow{grid-template-columns:1fr 12px 1fr 12px 1fr;gap:3px}.system-flow>span{display:block;padding:10px 4px;font-size:.75rem;min-height:78px}.system-flow small{font-size:.75rem;margin-bottom:7px;letter-spacing:0}.system-flow i{display:block}.aside-foot{font-size:.875rem}.aside-foot span{max-width:none}.stats strong{font-size:clamp(2rem,7.3vw,2.5rem)}}
@media(max-width:360px){.wrap{padding-inline:20px}h1{font-size:3.5rem}.project{padding:20px}.system-flow{grid-template-columns:1fr}.system-flow>span{display:flex;min-height:0;padding:12px}.system-flow small{margin:0}.system-flow i{display:none}nav{gap:13px}.wordmark{font-size:1.75rem}.stats strong{font-size:2rem}}
@media print{@page{size:A4;margin:14mm 16mm}html,body{background:white!important;max-width:none;margin:0;border:0;color:#172017;scroll-behavior:auto}body>header,body>main,body>footer,.skip-link{display:none!important}.print-cv{display:block;font:9.5pt/1.38 Arial,Helvetica,sans-serif}.print-cv header{border-bottom:2px solid #536e30;padding-bottom:10pt;margin-bottom:12pt}.print-cv h1{font-size:29pt;line-height:1.1;letter-spacing:-1pt;margin:0 0 5pt;font-weight:700}.print-cv .cv-title{font-size:11.5pt;font-weight:600;margin:0 0 5pt}.print-cv header p{margin:0;font-size:9pt}.print-cv h2{font-size:12pt;letter-spacing:0;line-height:1.2;margin:12pt 0 5pt;color:#334c24;font-weight:700;text-transform:uppercase;break-after:avoid}.print-cv h3{font-size:10pt;font-weight:700;margin:9pt 0 2pt;break-after:avoid}.print-cv p{margin:4pt 0;orphans:3;widows:3}.print-cv .cv-date{font-size:9pt;color:#4c5747;margin:0 0 4pt;break-after:avoid}.print-cv ul{padding-left:15pt;margin:4pt 0 8pt}.print-cv li{margin:3pt 0;break-inside:avoid}.print-cv section{break-inside:avoid}.print-cv section:nth-of-type(2){break-inside:auto}}

/* Architecture figures and the full-size, keyboard-accessible viewer. */
.artifact-link.architecture{aspect-ratio:1280/1120;background:#141713}
footer.wrap{display:block;min-height:0;padding-block:32px}
.footer-main{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:20px 30px}
.footer-copyright{color:var(--muted)}
.footer-disclaimer{max-width:900px;margin:24px 0 0;color:var(--muted);font-size:.8125rem;line-height:1.65}
.diagram-dialog{width:min(1440px,calc(100vw - 32px));height:min(1040px,calc(100dvh - 32px));max-width:none;max-height:none;margin:auto;padding:0;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);box-shadow:0 24px 100px #0008}
.diagram-dialog[open]{display:grid;grid-template-rows:auto auto minmax(0,1fr)}
.diagram-dialog::backdrop{background:#0b100bd9}
.diagram-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;padding:16px 20px}
.diagram-toolbar h2{font-size:1.2rem;line-height:1.3;letter-spacing:-.02em;margin:0}
.diagram-controls{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.diagram-controls button,.diagram-controls a{min-width:44px;min-height:44px;padding:10px 12px;background:transparent;border:1px solid var(--line);border-radius:4px;color:var(--ink);cursor:pointer;text-decoration:none;font-size:.875rem;display:inline-flex;align-items:center;justify-content:center}
.diagram-controls button:hover,.diagram-controls a:hover{background:#e5ebdc}
.diagram-controls button:disabled{opacity:.4;cursor:default}
.diagram-controls output{min-width:42px;font: .75rem Consolas,monospace;color:var(--muted);text-align:center}
.diagram-controls #diagram-close{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.diagram-hint{margin:0;padding:0 20px 14px;font-size:.8125rem;line-height:1.5;color:var(--muted)}
.diagram-canvas{min-height:0;overflow:auto;overscroll-behavior:contain;background:#141713;padding:24px}
.diagram-canvas img{display:block;max-width:none;height:auto;margin:auto}
.diagram-canvas:focus-visible{outline-offset:-4px}
@media(max-width:600px){.diagram-toolbar{padding:14px;gap:10px}.diagram-controls{gap:6px}.diagram-controls button,.diagram-controls a{padding:9px}.diagram-hint{padding:0 14px 12px}.diagram-canvas{padding:16px}.footer-disclaimer{margin-top:22px}}
@media(prefers-reduced-motion:reduce){:root{scroll-behavior:auto}}
@media print{.diagram-dialog{display:none!important}}
