@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Space+Grotesk:wght@400;500;600;700&display=swap');
:root{color-scheme:light;--bg:#f7f9fc;--panel:#ffffff;--muted:#526171;--line:#d4dde6;--ink:#182735;--cyan:#087d72;--font:'DM Sans',sans-serif;--display:'Space Grotesk',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,[tabindex]:focus-visible,summary:focus-visible{outline:3px solid var(--cyan);outline-offset:5px}button:disabled{opacity:.35;cursor:default}.skip{position:fixed;top:-100px;left:20px;padding:15px;background:var(--cyan);color:#f7f9fc;z-index:100}.skip:focus{top:15px}.nav{height:90px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;max-width:1380px;margin:auto;padding:0 52px}.wordmark{font:700 28px var(--display)}.wordmark span,h1 span{color:var(--cyan)}nav{display:flex;gap:40px}nav a,.nav-github{font-size:14px}nav a:hover,.text-link:hover,.socials a:hover{color:var(--cyan)}main{overflow:hidden}.intro{max-width:1380px;padding:76px 52px 68px;margin:auto}.intro-line,.intro-bottom{display:flex;align-items:center;justify-content:space-between;gap:30px}.eyebrow,.section-label,.card-top,.paper-top,.rail-caption>span:last-child{font:500 12px var(--display);letter-spacing:1.5px}.eyebrow{color:var(--cyan)}.location{color:var(--muted);font-size:14px}h1{font:500 clamp(65px,9.6vw,138px)/1.08 var(--display);letter-spacing:-6px;margin:28px 0 24px}h2{font:500 clamp(32px,3.2vw,46px)/1.15 var(--display);letter-spacing:-1.6px;margin:20px 0 24px}.intro-bottom p{font-size:22px;line-height:1.5;margin:0;color:#526171}.text-link{font-size:14px}.text-link span{margin-left:20px;font-size:24px}.resume-section{max-width:1276px;margin:0 auto 128px;display:grid;grid-template-columns:1fr 1fr;gap:90px;align-items:center;border-top:1px solid var(--line);padding-top:68px}.section-label{color:var(--muted);display:flex;gap:20px;align-items:center}.section-label>span{color:var(--cyan)}.bio{color:var(--muted);max-width:460px}.resume-actions{display:flex;gap:12px;margin:28px 0 36px;flex-wrap:wrap}.button{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:10px 20px;border:1px solid #b8c7d4;border-radius:6px;background:transparent;font-size:14px;font-weight:600;transition:background .2s,transform .2s}.button:hover{background:#e9f0f5;transform:translateY(-2px)}.primary{background:var(--cyan);color:#ffffff;border-color:var(--cyan)}.primary:hover{background:#08665e}.education{border-top:1px solid var(--line);padding-top:24px;margin-bottom:30px}.education dt{font-size:12px;letter-spacing:1.3px;color:var(--muted)}.education dd{margin:10px 0 0;font-weight:600}.education dd span{display:block;font-size:14px;color:var(--muted);font-weight:400;margin-top:5px}.experience h3{font-size:16px;font-weight:500;margin-bottom:16px}.experience article{margin-bottom:22px}.experience article>div{display:flex;flex-wrap:wrap;gap:6px 20px;justify-content:space-between}.experience h4{font-size:14px;font-weight:600;margin:0}.experience article span{color:var(--muted);font-size:12px}.experience article p{font-size:14px;color:var(--muted);margin-top:8px}.socials{display:flex;gap:28px;font-size:14px;margin-top:30px}.resume-paper{background:#fff;border:0;padding:0;box-shadow:0 32px 90px #24415a16;transform:rotate(1.4deg);color:#202832;display:block;width:100%;border-radius:5px;overflow:hidden;transition:transform .3s}.resume-paper:hover{transform:rotate(0deg) translateY(-5px)}.paper-top{display:flex;justify-content:space-between;padding:17px 22px;color:#667281;background:#edf0f3;font-size:11px}.resume-paper img{display:block;width:100%;height:auto}.paper-bottom{display:flex;justify-content:space-between;padding:15px 22px;border-top:1px solid #d7dde3;font-size:14px;background:#edf0f3}.projects{max-width:1380px;margin:auto;padding:0 52px 100px}.projects-header{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:32px}.projects-header h2{margin-bottom:0}.project-nav{display:flex;align-items:center;gap:10px}.project-nav>span{font:14px var(--display);color:var(--muted);margin-right:16px}.project-nav button{width:46px;height:46px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:transparent;font-size:28px}.project-nav button:hover{background:#e9f0f5}.project-rail{display:flex;gap:28px;overflow-x:auto;scroll-snap-type:x mandatory;padding:10px 2px 30px;scrollbar-width:thin;scrollbar-color:#b1c0ce transparent;align-items:flex-start}.project-card{flex:0 0 660px;min-height:490px;border:1px solid var(--line);background:var(--panel);border-radius:16px;scroll-snap-align:start;overflow:hidden;box-shadow:0 16px 30px #24415a0d;transition:border-color .3s;position:relative}.project-card:hover{border-color:#88aaa7}.card-top{display:flex;justify-content:space-between;color:#526171;padding:25px 30px 0;font-size:11px}.trader-flow,.secure-flow{display:flex;align-items:center;justify-content:center;gap:12px;margin:40px 30px 32px;min-height:80px;font:14px var(--display)}.trader-flow>div,.secure-flow>div{border:1px solid #bccbd7;padding:12px 16px;border-radius:5px;background:#f0f5f9;text-align:center}.trader-flow>span,.secure-flow>span{color:#607585}.trader-flow .accent,.secure-flow .accent{border-color:var(--cyan);color:var(--cyan);background:#e2f3ef}.secure-flow{gap:24px}.secure-flow div{min-width:132px}.secure-flow div span{display:block;font-size:10px;color:#48675f;letter-spacing:1px;margin-top:3px}.card-content{padding:0 30px 30px}.card-content h3{font:500 36px var(--display);letter-spacing:-1px;margin:0 0 14px}.card-content h3 span{display:block;font:500 11px var(--display);letter-spacing:1.4px;color:var(--cyan);margin-top:7px}.card-content p{font-size:16px;color:#526171;max-width:570px;line-height:1.6;margin:0 0 20px}.tags{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:25px}.tags span{padding:3px 10px;border:1px solid #cddae3;border-radius:4px;font-size:12px;color:#445b6c}.card-actions{display:flex;align-items:center;gap:25px}.source-link{font-size:14px;background:transparent;border:0;padding:0;text-decoration:underline;text-underline-offset:5px;color:#365469}.rail-caption{display:flex;justify-content:space-between;gap:20px;margin-top:18px;font-size:14px;color:var(--muted)}.rail-caption>span:last-child{font-size:10px}footer{border-top:1px solid var(--line);max-width:1276px;margin:auto;padding:50px 0 25px}.footer-email{display:block;font:500 clamp(19px,3vw,40px) var(--display);letter-spacing:-.8px;margin-top:20px;overflow-wrap:anywhere}.footer-email:hover{color:var(--cyan)}.footer-bottom{display:flex;justify-content:space-between;margin-top:65px;color:var(--muted);font-size:12px}.project-card.expanded{flex-basis:min(1080px,calc(100vw - 108px));min-height:1080px}.expanded>.secure-flow,.expanded>.card-content{display:none}.expanded>.card-top{padding-bottom:20px}.architecture{padding:26px 30px 30px;border-top:1px solid var(--line)}[hidden]{display:none!important}.architecture-heading{display:flex;align-items:center;justify-content:space-between}.architecture-heading h4{font:500 32px var(--display);margin:7px 0}.close-diagram{border:1px solid var(--line);background:transparent;border-radius:50%;width:42px;height:42px;font-size:25px}.diagram-instruction{font-size:14px;color:var(--muted);margin:12px 0 18px}.diagram-scroll{overflow-x:auto;scrollbar-width:thin;scrollbar-color:#b1c0ce transparent}#c4{display:block;width:100%;min-width:800px;height:auto}.c4-boundary{fill:#f2f6f9;stroke:#b2c3d0;stroke-dasharray:7 6;stroke-width:1.5}.c4-boundary-label{fill:#50697b;font:12px var(--display);letter-spacing:1px}.c4-edge{stroke:#8ba6b7;stroke-width:1.5;fill:none;transition:opacity .2s,stroke .2s}.c4-edge.active{stroke:var(--cyan);stroke-width:2.5}.c4-edge.dim{opacity:.15}.c4-node{cursor:pointer;outline:none}.c4-node rect{fill:#ffffff;stroke:#95aebf;stroke-width:1.5;transition:fill .2s,stroke .2s}.c4-node.external rect{fill:#ffffff;stroke:#95a7b4;stroke-dasharray:5 3}.c4-node.data rect{fill:#e6f3ea;stroke:#83ad97}.c4-node:hover rect,.c4-node:focus rect,.c4-node.selected rect{stroke:var(--cyan);fill:#dcf2ec;stroke-width:2.5}.c4-node text{fill:#1b3447;pointer-events:none}.c4-node .node-title{font:600 16px var(--display)}.c4-node .node-tech{font:11px var(--display);fill:#4f6e83}.c4-node .node-role{font:12px var(--font);fill:#425e70}.service-detail{background:#f0f7f5;border:1px solid #b3d5cd;border-radius:10px;padding:20px 24px;display:grid;grid-template-columns:220px 1fr;gap:8px 24px;min-height:150px}.service-detail h5{font:500 22px var(--display);margin:7px 0}.service-detail p{margin:0;font-size:14px;color:#425e70}.service-detail .eyebrow{font-size:10px}#service-connections{grid-column:2;font-size:12px;color:#246c61;display:flex;gap:5px 14px;flex-wrap:wrap}.diagram-footer{display:flex;flex-wrap:wrap;gap:14px 22px;align-items:center;margin-top:20px;font-size:12px;color:var(--muted)}.diagram-footer span{display:flex;align-items:center;gap:7px}.diagram-footer i{display:inline-block;width:10px;height:10px;border:1px solid #718d9e;border-radius:2px}.legend-external{border-style:dashed!important}.legend-data{background:#bce0ca}.diagram-footer button{margin-left:auto;font-size:12px}#connection-list{margin-top:20px;padding-top:15px;border-top:1px solid var(--line);display:grid;grid-template-columns:1fr 1fr;gap:7px 22px;font-size:13px;color:#425e70}#connection-list p{margin:0}dialog{color:var(--ink);background:var(--bg);padding:0;border:1px solid #b1c3d0;border-radius:10px;width:min(940px,95vw);max-height:94vh}dialog::backdrop{background:#263f5680;backdrop-filter:blur(6px)}.dialog-header{position:sticky;top:0;display:flex;justify-content:space-between;align-items:center;background:var(--bg);padding:14px 24px;border-bottom:1px solid var(--line);z-index:2}.dialog-header h2{font:500 18px var(--display);margin:0}.dialog-header>div{display:flex;gap:20px;align-items:center}.dialog-header a{font-size:14px}.dialog-header button{background:transparent;border:0;font-size:28px}.resume-full{padding:24px;text-align:center}.resume-full img{width:100%;height:auto;display:block;margin-bottom:20px}.resume-full details{text-align:left;padding:20px 8px}#resume-text{white-space:pre-line;font-size:16px;line-height:1.7;margin-top:20px}summary{cursor:pointer}@media(min-width:1500px){.project-card{flex-basis:700px}}@media(max-width:1250px){.resume-section,footer{margin-left:52px;margin-right:52px}.resume-section{gap:50px}.resume-copy h2{font-size:36px}.experience article>div{display:block}.experience article span{display:block;margin-top:5px}}@media(max-width:850px){.nav{padding:0 26px;height:76px}nav{gap:24px}.intro{padding:50px 26px}h1{letter-spacing:-3px}.intro-bottom p{font-size:18px}.resume-section{grid-template-columns:1fr;gap:40px;margin:0 26px 80px;padding-top:40px}.resume-copy h2 br{display:none}.resume-copy h2{font-size:38px}.bio{max-width:650px}.resume-paper{max-width:550px;justify-self:center;transform:rotate(.7deg)}.experience article>div{display:flex}.projects{padding:0 26px 65px}.projects-header h2{font-size:34px}.project-card{flex-basis:min(620px,calc(100vw - 60px))}.trader-flow{gap:6px;font-size:12px;margin-left:20px;margin-right:20px}.trader-flow>div{padding:10px}.secure-flow{gap:12px}.secure-flow>div{min-width:0;font-size:13px;padding:10px 13px}.card-content{padding-left:24px;padding-right:24px}.project-card.expanded{flex-basis:calc(100vw - 60px);min-height:0}.architecture{padding:22px 20px}.service-detail{grid-template-columns:1fr}.service-detail p{grid-column:1}#service-connections{grid-column:1}.rail-caption>span:last-child{display:none}.diagram-footer button{margin-left:0}footer{margin:0 26px}.project-nav>span{margin-right:4px}.project-nav button{width:38px;height:38px}#connection-list{grid-template-columns:1fr}}@media(max-width:520px){.nav-github{display:none}nav{gap:20px}.intro-line{display:block}.location{display:block;margin-top:12px;font-size:12px}h1{font-size:58px;margin:25px 0}.intro-bottom{display:block}.intro-bottom .text-link{display:inline-block;margin-top:24px}.projects-header{display:block}.project-nav{justify-content:flex-end;margin-top:22px}.card-top{padding:22px 22px 0;font-size:10px;letter-spacing:.8px}.trader-flow{flex-wrap:wrap;margin:30px 18px 26px}.trader-flow>div{font-size:11px}.secure-flow{gap:8px;margin:30px 18px 26px}.secure-flow>div{padding:10px 8px;font-size:12px}.secure-flow div span{font-size:8px;letter-spacing:.4px}.card-content h3{font-size:32px}.card-content h3 span{font-size:10px;letter-spacing:.8px}.card-content p{font-size:15px}.project-card{min-height:520px}.card-actions{gap:16px}.source-link{font-size:12px}.experience article>div{display:block}.footer-bottom{margin-top:40px}.dialog-header{padding:12px 16px}.dialog-header h2{font-size:14px}.dialog-header>div{gap:10px}.resume-full{padding:12px}.resume-actions{gap:10px}.architecture-heading h4{font-size:28px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}.resume-paper{transform:none}}
.architecture{position:relative}.node-tooltip{position:absolute;z-index:5;width:min(330px,calc(100% - 24px));background:#e3f8f3;color:#122b29;border:1px solid #087d72;border-radius:8px;padding:16px 18px;box-shadow:0 12px 35px #24415a26;pointer-events:none}.node-tooltip strong{font:600 16px var(--display)}.node-tooltip p{font-size:14px;line-height:1.55;margin:7px 0 0}@media(min-width:851px){.project-card.expanded{height:1080px;min-height:0}.expanded .architecture{height:calc(100% - 61px);overflow-y:auto;scrollbar-width:thin;scrollbar-color:#b1c0ce transparent}}@media(max-width:850px){#c4{min-width:980px}}

.intro-bottom{justify-content:flex-end}.project-carousel{display:grid;grid-template-columns:46px minmax(0,1fr) 46px;align-items:start;gap:14px}.carousel-arrow{width:46px;height:46px;border:1px solid var(--line);border-radius:50%;background:white;font-size:30px;line-height:1;display:grid;place-items:center;position:sticky;top:calc(50vh - 23px);margin-top:225px}.carousel-arrow:hover:not(:disabled){background:#e2f3ef;border-color:var(--cyan)}#project-count{font:14px var(--display);color:var(--muted)}.project-rail{min-width:0}.project-card.secure:not(.expanded){cursor:pointer}.diagram-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.diagram-toolbar .diagram-instruction{margin:0}.diagram-toolbar button{flex-shrink:0}.node-tooltip{pointer-events:auto;user-select:text}.primary:hover{color:white}.legend-service{background:white}.project-card.expanded{flex-basis:min(1000px,100%)}@media(min-width:851px){.project-card.expanded{height:1000px}.expanded .architecture{height:calc(100% - 61px)}}@media(max-width:850px){.project-carousel{grid-template-columns:36px minmax(0,1fr) 36px;gap:8px}.carousel-arrow{width:36px;height:36px;margin-top:230px}.project-card{flex-basis:100%}.project-card.expanded{flex-basis:100%;height:auto}.diagram-toolbar{align-items:flex-start;flex-direction:column}}@media(max-width:520px){.projects{padding-left:12px;padding-right:12px}.projects-header{padding:0 14px}.project-carousel{grid-template-columns:30px minmax(0,1fr) 30px;gap:5px}.carousel-arrow{width:30px;height:40px;border-radius:8px}.card-top{flex-wrap:wrap;gap:6px}.secure-flow{gap:6px;margin-left:12px;margin-right:12px}.secure-flow>div{padding:8px 6px}.card-content{padding-left:18px;padding-right:18px}.trader-flow{margin-left:12px;margin-right:12px}.diagram-scroll{margin-left:-8px;margin-right:-8px}}
