@font-face{font-family:Plex;src:url(/assets/PlexCondensed-Regular.77ec5b666914.woff2) format("woff2");font-style:normal;font-weight:400;font-display:optional}@font-face{font-family:Plex;src:url(/assets/PlexCondensed-SemiBold.e18a6691571f.woff2) format("woff2");font-style:normal;font-weight:600;font-display:optional}:root{--bg:#eeede7;--ink:#242923;--muted:#596058;--blue:#204fc4;--orange:#af4b27;--line:#bcbfb3;--panel:#e3e5dc;--sans:Arial,Helvetica,sans-serif;--display:Plex,"Arial Narrow",sans-serif;--mono:"SFMono-Regular",Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:25px}body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.65 var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-underline-offset:4px}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button{cursor:pointer}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid var(--blue);outline-offset:4px}button:disabled{opacity:.5;cursor:default}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--display);font-weight:600;line-height:1.1;letter-spacing:-.015em}em{font-style:normal}svg{display:block;width:100%;height:100%}.wrap{max-width:1220px;margin:auto;padding-left:50px;padding-right:50px}.header{max-width:1320px;margin:auto;padding:22px 50px;display:flex;justify-content:space-between;align-items:center;gap:25px;border-bottom:2px solid var(--ink)}.brand{display:flex;align-items:center;gap:15px;text-decoration:none;font:600 18px var(--display);white-space:nowrap}.brand-sub{display:block;font:8px/1.5 var(--mono);letter-spacing:.03em;color:var(--muted);margin-top:5px}.monogram{font:600 40px/.9 var(--display);letter-spacing:-.06em;color:var(--blue);border-right:1px solid var(--line);padding-right:18px}.header nav{display:flex;align-items:center;gap:27px;font:11px/1.5 var(--mono)}.header nav a{text-decoration:none;border-bottom:1px solid transparent;padding:5px 0}.header nav a:hover,.header nav [aria-current]{color:var(--blue);border-bottom-color:var(--blue)}.contact-link{color:var(--blue)}.skip{position:absolute;top:-100px;left:20px;background:var(--blue);color:#fff;padding:12px;z-index:20}.skip:focus{top:10px}.eyebrow{font:10px/1.6 var(--mono);letter-spacing:.025em;color:var(--muted)}.hero{display:grid;grid-template-columns:1.08fr 1fr;gap:75px;padding-top:45px;padding-bottom:45px;align-items:start}.hero h1{font-size:76px;line-height:1;letter-spacing:-.04em;margin:28px 0 23px}.hero h1>span{display:block;font:400 23px/1.3 var(--display);letter-spacing:0;margin-top:22px;color:var(--blue);border-left:3px solid var(--blue);padding-left:17px}.hero h1>span br{display:none}.hero h1>span br:after{content:" "}.hero-intro{font:400 24px/1.35 var(--display);max-width:430px}.hero-detail{font-size:13px;max-width:420px;color:var(--muted);margin-top:17px;line-height:1.8}.actions{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin-top:27px}.button{display:inline-flex;align-items:center;justify-content:center;gap:22px;text-decoration:none;font:11px/1.6 var(--mono);padding:11px 15px;background:transparent;color:var(--ink);border:1px solid var(--ink);border-radius:0}.button:hover{background:var(--panel);color:var(--blue);border-color:var(--blue)}.button.primary{background:var(--blue);color:#fff;border-color:var(--blue)}.button.primary:hover{background:#153aa4}.text-button{border-color:transparent;padding-left:0;padding-right:0}.hero-study{border:1px solid var(--ink);position:relative;background:#f6f5ef}.study-top{display:flex;justify-content:space-between;gap:10px;font:9px/1.5 var(--mono);padding:12px 17px;color:#fff;background:var(--ink)}.work-index{list-style:none;margin:0;padding:0 17px}.work-index li+li{border-top:1px solid #d2d4c9}.work-index a{display:flex;gap:17px;align-items:center;padding:11px 0;text-decoration:none;font:400 18px/1.2 var(--display)}.work-index a:hover{color:var(--blue)}.index-num{font:10px var(--mono);color:var(--orange);align-self:flex-start;margin-top:4px}.work-index a>span:last-child{margin-left:auto;font-size:19px}.work-index small{display:block;font:8px/1.4 var(--mono);letter-spacing:.025em;margin-top:4px;color:var(--muted)}.index-bottom{display:flex;justify-content:space-between;gap:15px;padding:13px 17px;font:8px/1.5 var(--mono);background:#e5e7de;border-top:1px solid var(--ink)}.index-bottom a{text-decoration:none;color:var(--blue)}.credentials{display:flex;justify-content:space-between;align-items:center;gap:25px;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);padding-top:18px;padding-bottom:18px;font:600 16px var(--display)}.credentials>span,.credentials a{font:10px/1.5 var(--mono);color:var(--muted)}.section{padding-top:65px;padding-bottom:45px}.section-heading{display:flex;justify-content:space-between;gap:25px;align-items:end;margin-bottom:25px}.section-heading h2{font-size:43px;margin-top:12px}.section-heading>p{font:11px/1.8 var(--mono);color:var(--muted)}.filters{display:flex;gap:0;flex-wrap:wrap;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);margin:30px 0 14px}.filter{background:transparent;border:0;border-right:1px solid var(--line);padding:11px 17px;color:var(--muted);font:10px/1.5 var(--mono);border-radius:0}.filter.active{background:var(--blue);color:#fff}.filter:not(.active):hover{background:var(--panel);color:var(--blue)}.result-count{font:9px/1.5 var(--mono);color:var(--muted);margin-bottom:20px}.project-grid{display:block}.project{border-top:1px solid var(--ink);padding:25px 0}.project:last-child{border-bottom:1px solid var(--ink)}.project[hidden]{display:none}.project-link{display:grid;grid-template-columns:45% 1fr;gap:38px;text-decoration:none;align-items:center}.project:hover h3{color:var(--blue)}.project:hover .art-arrow{background:var(--blue);color:#fff}.art{height:230px;position:relative;overflow:hidden;background-color:#e1e6db;background-image:linear-gradient(#929c941c 1px,transparent 1px),linear-gradient(90deg,#929c941c 1px,transparent 1px);background-size:20px 20px;border:1px solid #acb5a7}.art svg{padding:12px}.art-index{position:absolute;left:12px;top:10px;font:10px var(--mono);color:var(--muted)}.art-arrow{position:absolute;right:0;bottom:0;font:20px/1 var(--sans);padding:8px 12px;background:var(--bg);color:var(--blue);border-left:1px solid var(--line);border-top:1px solid var(--line)}.art text{fill:#4c5d55;font:10px var(--mono);letter-spacing:1px}.wire{stroke:#71806c;stroke-width:1.3;fill:none}.node{fill:#eeede7;stroke:#204fc4;stroke-width:2}.n4{fill:#204fc4;stroke:#204fc4}.music{background-color:#ede1cf}.wavebar{fill:#68502d}.key-art{fill:#faf4e5;stroke:#77634a;stroke-width:1}.crop{background-color:#e3e5e5}.device{fill:#f7f6ef;stroke:#4b6268;stroke-width:1.5}.land{fill:#a7b9ac}.crop-mark{fill:none;stroke:#204fc4;stroke-width:3}.crop-box{fill:#204fc40d;stroke:#204fc4;stroke-width:1;stroke-dasharray:4 4}.chart{background-color:#dee6df}.gridline{stroke:#7d8f805c;stroke-width:1;fill:none}.band{fill:#204fc421}.trend{fill:none;stroke:#204fc4;stroke-width:3}.security{background-color:#e4e0e9}.orbit{fill:none;stroke:#7f76976e;stroke-width:1;stroke-dasharray:4 7}.shield{fill:#dad4e0;stroke:#5a4d73;stroke-width:1.5}.terrain{background-color:#eae5d1}.contour{stroke:#64734a;stroke-width:1.5;fill:none}.road{stroke:#af4b27;stroke-width:5;fill:none;stroke-dasharray:8 6}.wave{background-color:#e0e4e7}.note{fill:#204fc4}.art .note-text{fill:#fff;font-size:24px;letter-spacing:0}.terminal{background-color:#e3e3d8}.project-body{display:flex;flex-direction:column;padding:8px 0}.project-body .eyebrow{color:var(--orange);font-size:9px}.project-body h3{font-size:31px;line-height:1.08;margin:12px 0 15px;max-width:430px}.project-body>p:not(.eyebrow){font-size:13px;color:var(--muted);max-width:420px;margin-bottom:22px;line-height:1.75}.card-bottom{display:flex;justify-content:space-between;gap:15px;font:9px/1.5 var(--mono);color:var(--muted);padding-top:15px;border-top:1px dashed var(--line)}.card-bottom>span:last-child{color:var(--blue);white-space:nowrap}.lab-callout{display:grid;grid-template-columns:1fr 1fr;gap:70px;align-items:center;border-top:3px double var(--ink);border-bottom:3px double var(--ink);padding-top:35px;padding-bottom:35px;background:#e1e5d9;margin-top:25px}.lab-callout h2{font-size:43px;margin:15px 0}.lab-callout p:not(.eyebrow){font-size:13px;color:var(--muted);max-width:440px}.lab-callout .button{margin-top:25px}.lab-preview{border:1px solid #7c8774;padding:25px;background:repeating-linear-gradient(0deg,transparent,transparent 24px,#70856920 24px,#70856920 25px)}.mini-bar{height:130px;display:flex;align-items:end;gap:14px;border-bottom:1px solid var(--ink)}.mini-bar span{flex:1;background:#204fc4;height:40%}.mini-bar span:nth-child(2){height:65%}.mini-bar span:nth-child(3){height:95%}.mini-bar span:nth-child(4){height:75%}.mini-bar span:nth-child(5){height:50%;background:var(--orange)}.mini-bar span:nth-child(6){height:85%}.mini-bar span:nth-child(7){height:100%}.lab-preview>p{font:9px var(--mono)!important;letter-spacing:.07em;margin-top:20px}.principles{display:grid;grid-template-columns:repeat(3,1fr);gap:35px;margin-top:30px}.principles article{border-top:1px solid var(--ink);padding-top:17px}.principles article>span{font:10px var(--mono);color:var(--orange)}.principles h3{font-size:23px;margin:15px 0 12px}.principles p{font-size:13px;color:var(--muted);line-height:1.8}.contact{padding-top:40px;padding-bottom:65px}.contact h2{font-size:48px;margin:15px 0 20px}.contact>p:not(.eyebrow){max-width:640px;font-size:14px;color:var(--muted)}footer{max-width:1220px;margin:auto;display:flex;gap:25px;align-items:center;border-top:2px solid var(--ink);padding:23px 50px 30px;font:9px/1.5 var(--mono);color:var(--muted)}.footer-name{font:600 17px var(--display);color:var(--ink);text-decoration:none}footer>span:nth-child(2){margin-right:auto}.back{display:inline-block;font:10px/1.5 var(--mono);color:var(--blue);text-decoration:none;margin-bottom:30px}.case-hero,.lab-header{padding-top:40px}.case-hero h1,.lab-header h1{font-size:58px;max-width:850px;margin:18px 0 22px}.lead{font:400 24px/1.4 var(--display);max-width:760px;color:var(--muted)}.case-meta{display:flex;gap:20px;flex-wrap:wrap;font:10px/1.7 var(--mono);margin:25px 0;color:var(--muted)}.case-meta>span:first-child{color:var(--blue)}.case-art{height:325px}.case-art svg{max-width:800px;margin:auto;padding-bottom:30px}.illustration-label{position:absolute;right:12px;bottom:10px;font:8px var(--mono);color:var(--muted)}.case-body{display:grid;grid-template-columns:235px 1fr;gap:70px;padding-top:45px;padding-bottom:30px}.case-body aside>p:not(.eyebrow){font:10px/1.5 var(--mono);color:var(--muted);margin-top:13px}.case-links{display:flex;flex-direction:column;gap:12px;margin-top:30px}.case-links .button{font-size:10px;gap:10px;justify-content:flex-start}.case-prose section{margin-bottom:30px}.case-prose h2{font-size:27px;margin-bottom:13px}.case-prose p{font-size:15px;color:var(--muted);line-height:1.85}.next-work{display:flex;justify-content:space-between;margin-bottom:50px;font:11px/1.5 var(--mono)}.resume{padding-top:45px;padding-bottom:55px}.resume-top{display:flex;gap:25px;align-items:center;justify-content:space-between}.resume h1{font-size:68px;margin:15px 0}.resume-summary{max-width:830px;margin:25px 0 17px;color:var(--muted);font-size:14px}.resume-contact{font:11px/1.6 var(--mono)}.resume-layout{display:grid;grid-template-columns:2fr 1fr;gap:75px;margin-top:45px}.resume h2{font-size:31px;margin-bottom:23px}.job{border-top:1px solid var(--ink);padding:22px 0}.job h3{font-size:27px;margin:9px 0 5px}.job-role{font:11px/1.6 var(--mono);color:var(--blue);margin-bottom:15px}.job>p:last-child,.resume aside>p{font-size:13px;color:var(--muted)}.resume aside h3{font-size:21px;margin:25px 0 9px}.resume aside h2:not(:first-child){margin-top:35px}.privacy{max-width:900px;padding-top:45px;padding-bottom:75px}.privacy h1{font-size:56px;margin:20px 0 35px}.privacy h2{font-size:28px;margin:27px 0 13px}.privacy p:not(.eyebrow){color:var(--muted)}.lab-header{padding-bottom:35px}.experiment{padding-top:30px;padding-bottom:40px;scroll-margin-top:15px}.experiment-title h2{font-size:35px;margin:15px 0}.experiment-title>p:last-child{max-width:780px;font-size:14px;color:var(--muted)}.experiment-body{padding:30px;border:1px solid var(--ink);margin-top:23px;background:#f5f4ee;box-shadow:5px 5px #d1d5c9}.controls{display:flex;align-items:center;gap:15px;flex-wrap:wrap;font:11px var(--mono)}.controls select{padding:11px 35px 11px 12px;border:1px solid var(--ink);border-radius:0;background:var(--bg);color:var(--ink);max-width:100%}.piano{display:grid;grid-template-columns:repeat(8,1fr);gap:7px;margin-top:28px}.piano button{height:160px;border:1px solid var(--ink);border-bottom:6px solid #969b8c;border-radius:0;background:#edeee3;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:7px;padding:20px 4px;color:var(--ink);font:22px var(--display)}.piano button span{font:10px var(--mono);color:var(--muted)}.piano button.playing{background:var(--blue);color:#fff;border-bottom-color:#15389a}.piano button.playing span{color:#fff}.lab-status{font:11px/1.65 var(--mono);color:var(--blue);margin-top:18px;min-height:22px}.lab-note{border-top:1px dashed var(--line);padding-top:18px;margin-top:22px}.lab-note>span{font:9px/1.5 var(--mono);color:var(--orange)}.lab-note p{font-size:12px;color:var(--muted);margin-top:8px;max-width:800px}.experiment>.back{margin:23px 0 0}.threshold-control label{display:flex;justify-content:space-between;align-items:center;font:11px var(--mono)}.threshold-control output{font:30px var(--display);color:var(--blue)}input[type=range]{width:100%;accent-color:var(--blue);margin:20px 0}.data-display{display:grid;grid-template-columns:1.4fr 1fr;gap:50px;margin-top:15px}.dot-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:12px;padding:20px 0}.dot{aspect-ratio:1;background:var(--blue);border:2px solid var(--blue);border-radius:50%}.dot.false{background:transparent;border-color:var(--orange);border-radius:0}.dot.excluded{opacity:.15}.dot-legend{display:flex;flex-wrap:wrap;gap:15px;font:9px/1.5 var(--mono);color:var(--muted);margin-top:10px}.dot-legend span{display:flex;align-items:center;gap:5px}.dot-legend i{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--blue)}.dot-legend i.irrelevant{border-radius:0;background:transparent;border:1px solid var(--orange)}.metrics{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-content:center}.metric strong{font:600 42px/1.2 var(--display);display:block;color:var(--blue)}.metric span{font:10px var(--mono);color:var(--muted)}details{margin-top:25px;font-size:12px;color:var(--muted)}summary{cursor:pointer;color:var(--ink);font:11px var(--mono)}details p{margin-top:15px}.table-scroll{overflow:auto;max-height:300px;margin-top:15px}table{width:100%;border-collapse:collapse;font:11px/1.5 var(--mono)}th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line)}caption{text-align:left;padding:10px;font-size:10px}@media(max-width:1000px){.wrap,.header{padding-left:30px;padding-right:30px}.hero{gap:35px}.hero h1{font-size:65px}.header nav{gap:18px}.brand-sub{font-size:7px}.project-link{gap:25px;grid-template-columns:44% 1fr}.project-body h3{font-size:28px}.card-bottom{flex-wrap:wrap}.art{height:220px}.case-body{gap:40px;grid-template-columns:205px 1fr}.credentials{gap:15px}.credentials a{max-width:115px}}@media(max-width:720px){.header{padding:19px 20px;gap:20px;align-items:start}.brand{font-size:14px;gap:10px}.monogram{font-size:31px;padding-right:12px}.brand-sub{display:none}.header nav{gap:15px;font-size:9px;flex-wrap:wrap;justify-content:flex-end}.header .contact-link{display:none}.wrap{padding-left:22px;padding-right:22px}.hero{grid-template-columns:1fr;padding-top:30px;padding-bottom:30px;gap:30px}.hero h1{font-size:67px;margin:21px 0}.hero h1>span{font-size:22px;margin-top:16px}.hero-intro{font-size:23px}.hero-detail{font-size:13px}.hero-study{width:100%;max-width:500px}.work-index a{padding:10px 0;font-size:18px}.credentials{flex-wrap:wrap;justify-content:flex-start;gap:15px 23px;font-size:15px;padding-top:17px;padding-bottom:17px}.credentials>span{width:100%}.credentials a{max-width:none}.section{padding-top:40px;padding-bottom:30px}.section-heading{display:block}.section-heading h2{font-size:36px}.section-heading>p{margin-top:15px;font-size:10px}.filters{margin-top:23px;gap:0;border-bottom:0}.filter{padding:10px 12px;font-size:9px;border-bottom:1px solid var(--ink);flex-grow:1}.project{padding:20px 0}.project-link{grid-template-columns:1fr;gap:19px}.art{height:225px}.project-body{padding:0}.project-body h3{font-size:30px;margin-top:10px}.project-body>p:not(.eyebrow){margin-bottom:17px}.card-bottom{justify-content:space-between;flex-wrap:nowrap;font-size:8px}.lab-callout{grid-template-columns:1fr;gap:25px;padding-top:30px;padding-bottom:30px;margin-top:20px}.lab-callout h2{font-size:37px}.lab-preview{padding:20px}.mini-bar{height:95px}.principles{grid-template-columns:1fr;gap:25px;margin-top:23px}.principles h3{margin-top:12px}.contact{padding-top:25px;padding-bottom:45px}.contact h2{font-size:38px}.contact>p:not(.eyebrow){font-size:13px}footer{padding:20px 22px;gap:15px;flex-wrap:wrap}footer>span:nth-child(2){width:100%;order:4}.case-hero,.lab-header{padding-top:28px}.case-hero h1,.lab-header h1{font-size:43px}.lead{font-size:22px}.case-meta{font-size:9px;gap:10px}.case-art{height:245px}.case-body{grid-template-columns:1fr;gap:30px;padding-top:30px}.case-body aside{padding-bottom:25px;border-bottom:1px solid var(--ink)}.case-body aside>p:not(.eyebrow){display:inline-block;margin-right:15px;font-size:9px}.case-links{flex-direction:row;flex-wrap:wrap;margin-top:20px}.case-prose p{font-size:14px}.resume{padding-top:30px}.resume-top{display:block}.resume-top>.button{margin-top:22px}.resume h1{font-size:56px}.resume-summary{font-size:13px}.resume-layout{grid-template-columns:1fr;gap:30px}.privacy h1{font-size:43px}.experiment{padding-top:20px;padding-bottom:25px}.experiment-title h2{font-size:30px}.experiment-body{padding:20px;box-shadow:3px 3px #d1d5c9}.controls{gap:10px}.controls label{width:100%}.controls .button{font-size:10px;padding:10px}.piano{gap:4px}.piano button{height:125px;font-size:20px}.piano button span{font-size:9px}.data-display{grid-template-columns:1fr;gap:20px}.dot-grid{gap:9px}.metrics{grid-template-columns:repeat(4,1fr);gap:10px}.metric strong{font-size:30px}.metric span{font-size:9px}.lab-header .actions{gap:8px}.lab-header .button{font-size:10px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}@media print{@page{margin:15mm}body{background:#fff;color:#171717;font-size:11px}.header,footer,.skip,#print-resume{display:none}.resume{padding:0;max-width:none}.resume h1{font-size:34px;margin:6px 0}.resume h2{font-size:22px;margin-bottom:15px}.resume .lead{font-size:16px}.resume-summary{font-size:11px;margin:15px 0 8px}.resume-contact{font-size:10px}.resume-layout{display:grid;grid-template-columns:2.3fr 1fr;gap:25px;margin-top:22px}.job{padding:12px 0;break-inside:avoid}.job h3{font-size:18px;margin-top:5px}.job-role,.job>p:last-child,.resume aside>p{font-size:10px;color:#333}.job-role{margin-bottom:6px}.eyebrow{color:#555;font-size:9px}.resume aside h3{font-size:15px;margin:15px 0 5px}.resume aside h2:not(:first-child){margin-top:22px}.lead,.resume-summary{color:#333}a{color:#171717}}:root{--blue:#0057ef;--ink:#0a2041;--paper:#fff;--rule:#d3dce8;--ref-w:1435;--ref-h:1096;--usage-0:#0057ef;--usage-1:#f18a26;--usage-2:#21a8aa;--usage-3:#7652cb}body{background:#eef2f7}.page-root{background:var(--paper);min-height:100vh;border-inline:1px solid var(--rule)}.topbar{height:56px;padding:0 24px;gap:22px}.brand{font-size:24px;gap:12px}.monogram{font-size:31px}.monogram span{margin-left:3px;color:var(--blue)}.profession{border:0;padding:0;letter-spacing:.04em}.topbar nav{gap:22px;font-size:14px}.topbar nav a:last-child{display:none}.cv-link{border-radius:0;background:var(--blue);padding:7px 20px;font-size:15px;box-shadow:none}.cv-link:hover{background:#003dbc}.hero-stage{height:174px;background-size:36px 36px}.hero-copy{padding:24px 24px 0}.eyebrow,.explore-link{display:none}.hero h1{font-size:39px;line-height:1.03;letter-spacing:-.04em;margin:0 0 10px;max-width:610px}.hero h1 span{color:#459bff}.hero-description{font:400 17px/1.35 Plex,sans-serif;letter-spacing:0;max-width:505px;margin:0}.shader-wrap{width:55%;opacity:1;mask-image:linear-gradient(90deg,transparent,#000 15%)}.field-register{right:24px;top:28px;font-size:12px}.field-register span{margin-top:9px}.instrument-bar{min-height:35px;padding:3px 24px;gap:16px;font-size:12px}.experiment-name,.experiment-name b{font-size:12px}.shader-stack{font-size:12px;padding-inline:16px}#shader-status{font-size:12px}.shader-controls{gap:12px}.shader-controls button{min-height:26px;border:0;border-radius:0;padding:2px 6px;font-size:14px}.stats-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.25fr) 200px;border-bottom:1px solid var(--rule);padding:12px 24px;gap:0}.stat-cell{display:flex;flex-direction:column;align-items:flex-start;text-align:left;text-decoration:none;position:relative;color:var(--ink);border-right:1px solid var(--rule);padding:0 20px;background:none;min-width:0}.stat-cell:first-child{padding-left:0}.stat-code{font:12px/1.2 Plex,sans-serif;color:#60768f;letter-spacing:.02em;white-space:nowrap}.stat-code i{font-style:normal;color:var(--blue);margin-left:8px}.stat-cell strong{font:700 42px/1.15 Space,sans-serif;letter-spacing:-.05em;color:var(--blue)}.stat-cell>span:last-child{font-size:16px;line-height:1.2}.stat-cell em{font-style:normal;display:block;font:12px/1.5 Plex,sans-serif;color:#526b85;margin-top:3px}.stat-cell:hover strong{color:#00359d}.stat-cell:focus-visible{outline-offset:2px}.stats-scope{align-self:center;font-size:13px;line-height:1.45;color:#566b84;margin:0;padding-left:22px}.experience{display:grid;grid-template-columns:160px minmax(0,1fr);gap:22px;padding:16px 24px;background:#fff;min-height:119px}.section-heading{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:7px;margin:0}.section-heading h2{font-size:23px;letter-spacing:-.035em}.experience .section-kicker{font:12px Plex,sans-serif;letter-spacing:.015em;margin:0 0 3px;color:var(--orange)}.section-heading>a{font-size:14px;line-height:1.2}.experience-grid{grid-template-columns:repeat(6,minmax(0,1fr));gap:0}.experience-grid article{padding:0 13px;border-top:0;border-left:1px solid var(--rule);display:flex;flex-direction:column;min-width:0;min-height:0}.experience h3{font:600 16px/1.15 Plex,sans-serif;letter-spacing:0;order:0;margin:0 0 5px}.job-date{position:static;font:12px/1.3 Plex,sans-serif;order:1;margin:0 0 4px;max-width:none;color:#526b85}.experience .job-role{order:2;font-size:14px;line-height:1.25;margin:0;color:#425b77;font-weight:400}.experience-grid article>p:not(.job-role),.experience-grid .job-tech{display:none}.atlas-layout{display:grid;grid-template-columns:184px minmax(0,1fr);padding:0 14px 0 24px}.language-rail{border-right:1px solid var(--rule);padding:18px 16px 30px 0;align-self:stretch}.rail-heading{display:flex;gap:9px;align-items:center}.rail-heading>span{font:12px Plex,sans-serif;color:var(--orange)}.rail-heading h2{font:700 21px/1.2 Space,sans-serif;letter-spacing:-.04em;margin:0}.rail-note,.rail-footnote{font-size:13px;line-height:1.35;color:#57708a;margin:9px 0 16px}.rail-footnote{margin-top:20px}.rail-cv{font-size:14px;font-weight:600;display:inline-block;margin-top:5px}#language-list{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--rule)}#language-list button{position:relative;display:flex;justify-content:space-between;align-items:center;padding:11px 9px 13px;border:1px solid var(--rule);border-top:0;min-width:0;text-align:left;font-size:14px;line-height:1.2}#language-list b{font-weight:400;color:#637992;font-variant-numeric:tabular-nums}#language-list i{position:absolute;bottom:0;left:0;width:var(--coverage);height:2px;background:#82b6ff}#language-list [aria-pressed=true]{background:var(--blue);color:#fff;border-color:var(--blue)}#language-list [aria-pressed=true] b{color:#fff}#language-list button:hover:not([aria-pressed=true]){background:#edf4ff}#language-list button:focus-visible{outline-offset:-3px;z-index:1}#projects{padding:0 0 0 14px;min-width:0}.shelf-head{min-height:59px;padding:14px 0 8px;gap:16px}.shelf-heading{gap:10px;margin:0}.shelf-heading h2{font-size:25px;letter-spacing:-.04em}.shelf-heading>span{font-size:14px}.search{min-width:200px;width:37%;border-radius:0;padding:6px 9px;gap:7px}.search input{font-size:14px}.shelf-tools{padding:0 0 10px;gap:12px;flex-wrap:nowrap}.filters{gap:4px}.filters button{border-radius:0;padding:6px 9px;font-size:14px;gap:5px}.filters button span{margin-left:2px;font-size:12px}.filters i{display:none}.filters button[data-filter=All][aria-pressed=true]{background:var(--blue);border-color:var(--blue)}.view-switch{border-radius:0;background:#fff;padding:0;margin-left:auto}.view-switch button{font-size:14px;border-radius:0;padding:6px 10px}.view-switch button[aria-pressed=true]{background:var(--ink)}#active-filters{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 10px;font-size:14px;color:#244772;background:#eef5ff;border-bottom:1px solid var(--rule)}#active-filter-label{overflow-wrap:anywhere}#clear-active-filters{white-space:nowrap;text-decoration:underline;font-size:14px;padding:4px}.project-grid.overview{grid-template-columns:repeat(6,minmax(0,1fr));border-left:1px solid var(--rule)}.project-grid.overview .project-card:nth-child(n){border-right:1px solid var(--rule)}.project-grid.overview .project-card{grid-template-columns:30px minmax(0,1fr);column-gap:8px;min-height:106px;padding:12px 9px 10px;align-content:start}.project-grid.overview .thumb{width:30px;height:30px;border-radius:3px;grid-row:1/3}.project-grid.overview h3{font-size:16px;line-height:1.12;margin-bottom:4px;letter-spacing:0}.project-grid.overview .stack{font-size:12px;line-height:1.2;margin:0}.project-grid.overview .brief{font-size:14px;line-height:1.2;border:0;padding:0;margin:8px 0 0}.project-grid.overview .project-card:before{opacity:1;width:2px;height:2px;inset:auto 0 0;transition:width .2s}.project-grid.overview .project-card:hover:before,.project-grid.overview .project-card:focus-visible:before{width:100%}.project-grid:not(.overview):not(.index){grid-template-columns:repeat(4,minmax(0,1fr))}.project-grid:not(.overview):not(.index) .project-card{grid-template-columns:40px minmax(0,1fr);min-height:126px;padding:14px 9px 12px 25px;column-gap:9px}.project-grid:not(.overview):not(.index) .thumb{width:40px;height:40px}.project-grid:not(.overview):not(.index) h3{font-size:17px}.project-grid:not(.overview):not(.index) .stack{font-size:13px}.project-grid:not(.overview):not(.index) .brief,.project-grid:not(.overview):not(.index) .technical{font-size:14px}.project-grid.index .project-card{min-height:57px;padding-block:9px}.project-grid.index .thumb{width:30px;height:30px;top:13px}.project-grid.index h3{font-size:16px}.project-grid.index .stack,.project-grid.index .brief,.project-grid.index .technical{font-size:14px}.footer{min-height:55px;padding:18px 24px;font-size:14px}.review-tools{margin:0 24px 16px}#usage-detail{max-width:650px}#usage-title{font:700 32px/1.1 Space,sans-serif;letter-spacing:-.04em;margin:8px 0 22px}.usage-intro{font-size:17px;line-height:1.6}.usage-intro strong{font:700 29px Space,sans-serif;color:var(--blue);letter-spacing:-.04em}.usage-intro span{font-size:14px;color:var(--muted)}#token-bar{display:flex;height:16px;overflow:hidden;margin:25px 0 15px}#token-breakdown{margin:0}.usage-row{display:flex;justify-content:space-between;gap:15px;border-bottom:1px solid var(--rule);padding:10px 0;font-size:16px}.usage-row dt{display:flex;gap:8px;align-items:center}.usage-row dt i{display:inline-block;width:8px;height:8px;background:var(--segment)}.usage-row dd{text-align:right;margin:0;font-variant-numeric:tabular-nums}.usage-row small{display:inline-block;min-width:67px;color:var(--muted);font-size:13px;margin-left:14px}.usage-calls{font-size:14px;color:var(--muted);margin:20px 0}.proof-viewport{--ref-h:1096}.proof-stage img{height:auto}.cv-page{--bg:#fff;--line:#d3dce8;--muted:#526982;background:#fff;color:var(--ink);font:16px/1.45 Plex,sans-serif}.cv-page .header{max-width:1320px;border-bottom:1px solid var(--line);padding:16px 32px}.cv-page .brand{font:700 22px Space,sans-serif}.cv-page .monogram{font:700 30px Space,sans-serif;border:0;padding:0}.cv-page .brand-sub{display:none}.cv-page .header nav{font:14px Plex,sans-serif;gap:24px}.cv-page .wrap{max-width:1200px;padding-inline:32px}.cv-page .resume{padding-top:28px;padding-bottom:20px}.cv-page .resume-top{display:flex;align-items:center;justify-content:space-between;gap:20px}.cv-page .resume h1{font:700 43px/1.05 Space,sans-serif;letter-spacing:-.04em;margin:7px 0}.cv-page .eyebrow{font-size:12px;color:#566e86;line-height:1.3}.cv-page .lead{font-size:20px;line-height:1.3}.cv-page .button{font:14px Plex,sans-serif;background:var(--blue);color:#fff;border-color:var(--blue);padding:9px 13px}.cv-page .resume-summary{font:16px/1.45 Plex,sans-serif;margin:19px 0 9px;max-width:920px}.cv-page .resume-contact{font-size:14px}.cv-page .resume-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:40px;margin-top:27px}.cv-page .resume h2{font:700 24px Space,sans-serif;letter-spacing:-.035em;margin:0 0 10px}.cv-page .job{position:relative;padding:13px 0 13px 95px;border-top:1px solid var(--rule);border-bottom:0;break-inside:avoid}.cv-page .job>.eyebrow{position:absolute;left:0;top:15px;width:78px;color:var(--blue)}.cv-page .job h3{font:700 20px Space,sans-serif;margin:0 0 5px;letter-spacing:-.03em}.cv-page .job .job-role{font-size:14px;line-height:1.3;margin-bottom:7px;color:#46617b}.cv-page .job>p:last-child{font-size:16px;line-height:1.4;margin:0}.cv-page .resume aside{padding:0 0 0 23px;border-left:1px solid var(--rule)}.cv-page .resume aside h3{font:600 17px Plex,sans-serif;margin:17px 0 5px}.cv-page .resume aside>p{font-size:15px;line-height:1.4}.cv-page .resume aside h2:not(:first-child){margin-top:24px}.cv-page .portfolio-note{display:flex;justify-content:space-between;gap:20px;align-items:center;background:#f0f5ff;padding:12px 16px;border-left:3px solid var(--blue);font-size:15px;margin-top:25px}.cv-page .portfolio-note a{font-weight:600;white-space:nowrap}.cv-page footer{font-size:13px;padding:20px 32px;border-top:1px solid var(--rule)}@media(max-width:1200px){.stats-strip{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.3fr) 175px}.stat-cell{padding-inline:15px}.stat-code i{display:none}.experience{grid-template-columns:135px minmax(0,1fr);gap:15px}.experience-grid article{padding-inline:10px}.shelf-tools{flex-wrap:wrap}.filters button{padding-inline:8px}.project-grid.overview{grid-template-columns:repeat(5,minmax(0,1fr))}.project-grid:not(.overview):not(.index){grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:1000px){.topbar{gap:18px}.hero h1{font-size:35px}.shader-wrap{width:48%}.hero-description{max-width:440px}.stats-strip{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.3fr);padding-bottom:9px}.stat-cell:last-of-type{border:0}.stats-scope{grid-column:1/-1;padding:8px 0 0;font-size:12px}.experience-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:13px 0}.experience{align-items:center}.atlas-layout{grid-template-columns:166px minmax(0,1fr)}.project-grid.overview{grid-template-columns:repeat(4,minmax(0,1fr))}.project-grid.overview .project-card{min-height:113px}.project-grid:not(.overview):not(.index){grid-template-columns:repeat(2,minmax(0,1fr))}.search{width:46%}.shelf-heading h2{font-size:23px}.shelf-heading{flex-wrap:wrap;gap:3px 8px}.rail-heading h2{font-size:20px}.cv-page .resume-layout{grid-template-columns:minmax(0,1fr) 240px;gap:25px}.cv-page .job{padding-left:80px}.cv-page .job>.eyebrow{width:66px}}@media(max-width:760px){.topbar{padding-inline:20px}.topbar nav{display:flex;margin-left:auto}.topbar nav a{display:none}.brand{font-size:22px}.cv-link{margin-left:0}.hero-stage{height:170px}.hero-copy{padding:22px 20px 0}.hero h1{font-size:34px;max-width:470px}.hero-description{font-size:16px;max-width:390px}.shader-wrap{width:65%;opacity:.4;mask-image:linear-gradient(90deg,transparent,#000 65%)}.instrument-bar{min-height:34px;padding:3px 20px;gap:12px;flex-wrap:nowrap}.shader-stack{display:none}.experiment-name{font-size:12px}.shader-controls{gap:5px}.shader-controls button{font-size:14px}.stats-strip{padding:12px 20px 8px}.stat-cell{padding-inline:12px}.stat-cell strong{font-size:34px}.stat-cell>span:last-child{font-size:14px}.stat-code{font-size:12px;white-space:normal}.stat-cell em{font-size:12px}.experience{padding:14px 20px;grid-template-columns:1fr;gap:13px}.section-heading{flex-direction:row;align-items:center;justify-content:space-between;gap:12px}.experience .section-kicker{display:none}.section-heading h2{font-size:22px}.section-heading>a{font-size:14px;max-width:none;text-align:left}.experience-grid article:nth-child(3n+1){border-left:0;padding-left:0}.experience .job-role{font-size:14px}.atlas-layout{padding:0 14px 0 20px;grid-template-columns:144px minmax(0,1fr)}.language-rail{padding-right:12px}.rail-heading{gap:5px}.rail-heading>span{display:none}.rail-heading h2{font-size:20px}.rail-note,.rail-footnote{font-size:12px}.rail-cv{font-size:14px}#language-list button{padding:10px 7px 12px;font-size:14px}.shelf-head{display:block;padding:14px 0 8px}.shelf-heading{margin:0 0 9px;display:flex;align-items:baseline}.search{width:100%;min-width:0}.shelf-tools{padding-bottom:9px;gap:8px}.filters{gap:3px}.filters button{font-size:14px;padding:5px 7px}.view-switch button{font-size:14px;padding:5px 9px}.project-grid.overview{grid-template-columns:repeat(3,minmax(0,1fr))}.project-grid.overview .project-card{min-height:118px;padding:10px 8px;grid-template-columns:26px minmax(0,1fr);column-gap:6px}.project-grid.overview .thumb{width:26px;height:26px}.project-grid.overview h3{font-size:16px}.project-grid.overview .brief{font-size:14px}.project-grid:not(.overview):not(.index){grid-template-columns:repeat(2,minmax(0,1fr))}.project-grid:not(.overview):not(.index) .project-card{grid-template-columns:30px minmax(0,1fr);padding-left:20px;column-gap:7px}.project-grid:not(.overview):not(.index) .thumb{width:30px;height:30px}.project-grid:not(.overview):not(.index) h3{font-size:16px}.project-grid.index .project-card{padding-left:58px;gap:12px;grid-template-columns:1fr 1fr}.project-grid.index .thumb{left:21px}.project-grid.index .project-number{left:1px}.project-grid.index .category-mark{left:4px}.cv-page .header{padding:14px 20px}.cv-page .header nav{font-size:14px;gap:14px}.cv-page .header nav a:nth-child(2){display:none}.cv-page .wrap{padding-inline:20px}.cv-page .resume-layout{grid-template-columns:1fr;gap:25px}.cv-page .resume aside{padding:20px 0 0;border-left:0;border-top:1px solid var(--rule);display:grid;grid-template-columns:1fr 1fr;column-gap:25px}.cv-page .resume aside>*{grid-column:1/-1}.cv-page .resume-top{align-items:flex-start}.cv-page .resume h1{font-size:37px}.cv-page .lead{font-size:18px}.cv-page .portfolio-note{font-size:14px}.cv-page .job h3{font-size:19px}.cv-page .job>p:last-child{font-size:16px}}@media(max-width:580px){.hero h1{font-size:30px}.hero-description{max-width:315px}.hero-stage{height:160px}.shader-wrap{width:75%}.stat-cell strong{font-size:32px}.stats-strip{grid-template-columns:1fr 1fr;gap:12px 0}.stat-cell:nth-child(2){border:0}.stat-cell:nth-child(3){padding-left:0}.stat-cell:nth-child(4){padding-left:12px}.stat-cell em{display:inline;margin-left:6px}.stat-code{font-size:12px}.stat-cell strong{margin-top:2px}.stat-cell>span:last-child{font-size:14px}.stat-usage>span:last-child{max-width:170px}.stats-scope{padding-top:0;font-size:12px}.experience-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 0}.experience-grid article:nth-child(n){border-left:1px solid var(--rule);padding-left:12px}.experience-grid article:nth-child(odd){border-left:0;padding-left:0}.experience h3{font-size:16px}.experience .job-role{font-size:14px}.atlas-layout{display:block;padding:0 14px}.language-rail{border:0;padding:15px 6px 8px}.rail-heading{display:inline-flex;margin-right:12px}.rail-heading h2{font-size:19px}.rail-note{display:inline;margin:0;font-size:12px}.rail-note br,.rail-footnote,.rail-cv{display:none}#language-list{display:flex;flex-flow:row wrap;gap:5px;border:0;margin-top:9px}#language-list button{border:1px solid var(--rule);padding:6px 8px 8px;font-size:14px;gap:8px}#language-list i{height:2px}.language-rail:after{content:"HTML + CSS grouped \b7  source-reviewed tags";display:block;font-size:12px;color:var(--muted);margin-top:7px}#projects{padding:0 6px}.shelf-head{padding-top:12px}.shelf-tools{flex-wrap:wrap}.shelf-heading{margin-bottom:9px;gap:8px}.project-grid.overview{grid-template-columns:repeat(3,minmax(0,1fr))}.project-grid.overview .project-card{display:flex;flex-direction:column;min-height:140px;padding:10px 8px;gap:0}.project-grid.overview .thumb{width:28px;height:28px;margin-bottom:8px}.project-grid.overview h3{font-size:16px}.project-grid.overview .stack{font-size:12px}.project-grid.overview .brief{font-size:14px;margin-top:7px}.project-grid:not(.overview):not(.index){grid-template-columns:repeat(2,minmax(0,1fr))}.project-grid:not(.overview):not(.index) .project-card{min-height:154px;grid-template-columns:1fr;padding:13px 11px}.project-grid:not(.overview):not(.index) .thumb{display:none}.project-grid:not(.overview):not(.index) h3,.project-grid:not(.overview):not(.index) .stack,.project-grid:not(.overview):not(.index) .brief,.project-grid:not(.overview):not(.index) .technical{grid-column:1}.project-grid:not(.overview):not(.index) .project-number,.project-grid:not(.overview):not(.index) .category-mark{display:none}.project-grid.index .project-card{min-height:69px}.project-grid.index h3{font-size:16px}.project-grid.index .stack{font-size:13px}.usage-intro strong{font-size:25px}#usage-title{font-size:28px}.usage-row{font-size:15px}.usage-row small{display:block;margin:3px 0 0}.cv-page .resume-top{display:block}.cv-page .resume-top .button{margin-top:15px}.cv-page .portfolio-note{align-items:flex-start;flex-direction:column;gap:7px}.cv-page .job{padding-left:0}.cv-page .job>.eyebrow{position:static;width:auto;margin:0 0 6px}.cv-page .resume{padding-top:21px}.cv-page .resume h1{font-size:36px}.cv-page .header .brand{font-size:18px}.cv-page .header .monogram{display:none}.cv-page .header nav{gap:12px}}@media(max-width:380px){.topbar{padding-inline:18px}.brand{font-size:21px}.cv-link{padding:7px 12px}.hero-copy{padding-inline:18px}.hero h1{font-size:27px}.hero-description{max-width:270px;font-size:16px}.hero-stage{height:166px}.instrument-bar{padding-inline:18px}.experiment-name{font-size:12px}.stats-strip{padding-inline:18px}.stat-cell strong{font-size:30px}.stat-cell em{display:block;margin-left:0}.stat-cell>span:last-child{font-size:14px}.experience{padding-inline:18px}.project-grid.overview{grid-template-columns:repeat(2,minmax(0,1fr))}.project-grid.overview .project-card{min-height:150px}.filters button{padding-inline:6px}.shelf-heading h2{font-size:25px}.cv-page .header nav a:first-child{display:none}}.language-rail{position:sticky;top:0;align-self:start}.project-toolbar{display:grid;grid-template-columns:1fr 1fr;gap:0 16px;padding:12px 0 10px}.project-toolbar .shelf-head{display:contents}.project-toolbar .shelf-heading{margin:0}.project-toolbar .search{width:100%;min-width:0}.project-toolbar .shelf-tools{grid-column:1/-1;margin-top:9px;padding:0;border:0}.project-toolbar .filters{flex-wrap:wrap}.project-toolbar .view-switch{flex-shrink:0}.project-toolbar+.index-head,.project-toolbar+#active-filters{border-top:1px solid var(--rule)}@media(max-width:580px){.language-rail{position:static}}@media(min-width:1300px){.project-toolbar{grid-template-columns:190px 210px minmax(0,1fr);gap:14px;align-items:center;min-height:64px}.project-toolbar .shelf-tools{grid-column:3;margin:0;gap:12px;flex-wrap:nowrap}.project-toolbar .filters{gap:3px;flex-wrap:nowrap}.project-toolbar .filters button{padding:6px 8px}.project-toolbar .shelf-heading{flex-wrap:wrap;gap:2px 8px}.project-toolbar .shelf-heading h2{font-size:23px}.project-toolbar .shelf-heading>span{font-size:13px}}@media(max-width:760px){.project-toolbar{grid-template-columns:1fr;padding:14px 0 9px;gap:9px}.project-toolbar .shelf-tools{margin:0}.project-toolbar .shelf-heading{display:flex;flex-wrap:wrap}.project-toolbar .filters button{padding:5px 7px}.project-toolbar .view-switch button{padding:5px 9px}}@media print{.stats-strip,.language-rail,.portfolio-note{display:none!important}.atlas-layout,.experience{display:block}.experience-grid{grid-template-columns:repeat(3,1fr)}.project-grid.overview{grid-template-columns:repeat(4,1fr)}.cv-page .resume{padding:0}.cv-page .wrap{max-width:none;padding:0}.cv-page .resume h1{font-size:31px}.cv-page .resume .lead{font-size:16px}.cv-page .resume-summary,.cv-page .job>p:last-child{font-size:12px}.cv-page .resume-layout{grid-template-columns:2fr 1fr;gap:24px}.cv-page .job{padding:10px 0}.cv-page .job>.eyebrow{position:static;width:auto;margin-bottom:4px}.cv-page .job h3{font-size:18px}.cv-page .job .job-role,.cv-page .resume aside>p{font-size:11px}.cv-page .resume aside{padding-left:16px;display:block}.cv-page .resume h2{font-size:21px}.cv-page .resume aside h3{font-size:15px}.cv-page .header,.cv-page footer{display:none}}:root{--ink:#101b22;--muted:#506772;--paper:#f7f9fa;--rule:#cdd9df;--blue:#125e73;--orange:#147184;--lime:#dfff70;--night:#10171b;--ref-w:1386;--ref-h:1135;--usage-0:#127083;--usage-1:#96ac31;--usage-2:#4dabae;--usage-3:#8275ab}body{background:#e4eaed}::selection{background:var(--lime);color:var(--night)}.topbar{background:var(--night);border-color:#3a4a52;height:56px;padding-inline:28px;gap:25px}.topbar .brand{color:#f7f9fa;font-weight:400;font-size:27px}.topbar .monogram{color:var(--lime);font-weight:700}.topbar .monogram span{color:#d7e3e8;font-weight:400;margin-left:10px}.topbar .profession{color:#879da6;font-size:10px;letter-spacing:.12em}.topbar nav a{color:#e9f0f3;font-weight:400}.topbar nav a:hover{color:var(--lime)}.cv-link{background:var(--lime);color:#10171b;padding:8px 23px;font-size:15px}.cv-link:hover{background:#efffb6;color:#10171b}.cv-link:focus-visible,.hero a:focus-visible,.shader-controls button:focus-visible{outline-color:var(--lime)}.hero{background:var(--night)}.hero-stage{height:286px;background-image:linear-gradient(#71969b0a 1px,transparent 1px),linear-gradient(90deg,#71969b0a 1px,transparent 1px);background-size:44px 44px}.hero-stage:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,var(--night) 5%,#10171b99 30%,transparent 60%)}.hero-copy{padding:27px 28px 0;background:none}.hero .eyebrow{display:block;color:#b5d0d8;font:10px/1.4 monospace;letter-spacing:.16em;margin:0 0 14px}.hero h1{font-size:clamp(39px,4.35vw,65px);line-height:1.01;letter-spacing:-.05em;max-width:770px;margin:0 0 13px;text-shadow:0 2px 25px #10171b}.hero h1 span{color:var(--lime)}.hero-description{font:400 19px/1.35 Plex,sans-serif;color:#dce8ed;max-width:505px;letter-spacing:.005em;margin:0}.hero-links{display:flex;gap:42px;margin-top:21px}.explore-link{display:inline-block;color:#e6f2f6;font:400 15px/1.4 Space,sans-serif;border-color:#7f999f;padding-bottom:4px}.explore-link:hover{color:var(--lime);border-color:var(--lime)}.explore-link span{margin-left:9px}.shader-wrap{width:56%;opacity:1;mask-image:linear-gradient(90deg,transparent,#000 8%);z-index:1}.field-register{z-index:2;display:block;right:28px;top:22px;font:10px/1.8 monospace;color:#a2c3cc}.field-register span{margin:6px 0 0 70px;color:#759eaa;font-size:22px}.field-scale{position:absolute;left:3%;bottom:19px;pointer-events:none;font:9px/1.3 monospace;letter-spacing:.06em;color:#93b2bc}.field-scale>span{display:inline-block;margin-left:24px;color:#7598a4;font-size:11px}.shader-fallback{inset:20% 7%;border-color:#a6dad8;border-radius:20% 75% 24%;box-shadow:0 0 35px #94debe33,inset 0 0 35px #65dfdf22;transform:rotate(-8deg)}.instrument-bar{background:var(--night);min-height:38px;border-color:#3a4a52;padding:3px 28px;gap:18px}.experiment-name{color:#acc7d0;font:10px/1.3 monospace;letter-spacing:.075em}.experiment-name b{color:var(--lime);font-size:10px}.shader-stack{font:11px/1.3 monospace;color:#9ab7c1;padding-inline:18px;border-color:#3a4a52}#shader-status{font:12px Plex,sans-serif;color:#9ab7c1}.shader-controls button,.shader-controls button:last-child{color:#d4e5ed;font:13px/1.3 Plex,sans-serif;padding:4px 8px;min-height:28px}.shader-controls button:hover{background:#253037;color:var(--lime)}.stats-strip{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.15fr) 236px;padding:21px 28px;background:var(--night);color:#ecf3f5;border-color:#3a4a52;min-height:120px}.stat-cell{color:#f1f5f6;border-color:#3a4a52;padding-inline:26px;justify-content:center}.stat-cell strong{font-size:43px;color:#f3f7f9;line-height:1.08;letter-spacing:-.045em}.stat-cell>span:last-child{font-size:15px;color:#d4e5ed}.stat-code{font:9px/1.4 monospace;letter-spacing:.06em;color:#86a4af;margin-bottom:4px}.stat-code i{color:var(--lime);font:10px Plex,sans-serif}.stat-cell em{color:#bad6bf;font-size:12px;margin-top:3px}.stat-cell:hover strong{color:var(--lime)}.stat-cell:focus-visible{outline-color:var(--lime)}.stats-scope{font-size:12px;color:#adc6cf;line-height:1.4;padding-left:22px}.stats-scope:before{content:"A RECORDED SNAPSHOT";display:block;font:9px/1.5 monospace;letter-spacing:.08em;color:var(--lime);margin-bottom:5px}.experience{background:var(--paper);padding:19px 28px;grid-template-columns:150px minmax(0,1fr);gap:20px;min-height:119px}.experience .section-kicker{display:none}.section-heading h2{font-size:23px}.section-heading>a{color:#254652;text-decoration:underline;font-size:14px}.experience-grid article{padding-inline:17px}.experience h3{font-size:16px;color:#0f2029}.experience .job-date{color:#52717f}.experience .job-role{font-size:13px;line-height:1.3;color:#526a77}.atlas-layout{grid-template-columns:200px minmax(0,1fr);padding:0 23px 0 28px}.language-rail{padding:22px 20px 30px 0}.rail-heading h2{font-size:19px}.rail-heading>span{font:10px monospace;color:#6a8792}.rail-note{font-size:12px;margin:9px 0 14px}.rail-footnote{font-size:12px;margin-top:19px}#language-list{border:0;gap:7px}#language-list button{border:0;padding:10px 0 17px;font-size:15px;background:none}#language-list button:before{content:"";height:5px;position:absolute;left:0;right:0;bottom:3px;background:#e0e8ec}#language-list i{height:5px;bottom:3px;background:#53c4df}#language-list [aria-pressed=true]{background:none;color:var(--ink);font-weight:600}#language-list [aria-pressed=true] i{background:#bde936}#language-list button:hover:not([aria-pressed=true]){background:#eaf0f2}.rail-cv{color:#254652}#projects{padding-left:15px}.project-toolbar{min-height:74px;padding:16px 0 12px;gap:12px}.project-toolbar .search{background:transparent;border-color:#bbcbd4}.project-toolbar .filters{gap:0}.project-toolbar .filters button{background:transparent;border-right:0;min-height:34px;padding:6px 9px;font-size:13px}.project-toolbar .filters button:last-child{border-right:1px solid var(--rule)}.project-toolbar .filters [aria-pressed=true],.filters button[data-filter=All][aria-pressed=true]{background:var(--night);border-color:var(--night);color:#fff}.filters button[aria-pressed=true] span{color:#c3d9e1}.project-toolbar .view-switch{background:transparent}.project-toolbar .view-switch button{min-height:32px;font-size:13px;padding:6px 10px}.project-toolbar .view-switch [aria-pressed=true]{background:var(--night)}.shelf-heading h2{font-size:24px}.shelf-heading>span{font-size:13px;color:#607c89}#active-filters{background:#eaf2f3;color:#244b57}.project-grid.overview{gap:0;border-top:1px solid var(--rule)}.project-card{background:transparent}.project-card:hover{background:#edf3f4;box-shadow:inset 0 0 0 1px #a5bfc8}.project-grid.overview .project-card{min-height:117px;padding:13px 12px 12px;column-gap:9px}.project-grid.overview h3{font-size:16px;line-height:1.13;font-weight:600}.project-grid.overview .stack{font-size:12px;color:#536e7b}.project-grid.overview .thumb{border-radius:1px;width:30px;height:30px}.project-grid.overview .brief{margin-top:10px;font-size:14px;color:#3b5663;line-height:1.25}.project-grid.overview.has-spotlights{border:0;gap:0;grid-template-columns:repeat(6,minmax(0,1fr))}.has-spotlights .project-card:not(.spotlight){border-left:1px solid var(--rule)}.has-spotlights .project-card:nth-child(n+4){border-top:1px solid var(--rule);margin-top:-1px}.project-grid.overview .spotlight{grid-column:span 2;grid-template-columns:52px minmax(0,1fr);grid-template-rows:min-content min-content 1fr min-content;min-height:166px;padding:19px 16px 13px;column-gap:14px;margin:0 10px 14px 0;border:1px solid #b9d2d8;background:#e8f4f3;clip-path:polygon(0 0,calc(100% - 17px) 0,100% 17px,100% 100%,0 100%);transition:background .15s,box-shadow .15s;position:relative}.project-grid.overview .spotlight:nth-child(3){margin-right:0;background:#e4ecf1}.project-grid.overview .spotlight:after{content:"";position:absolute;right:0;top:0;width:24px;height:1px;background:#aac4cd;transform-origin:top right;transform:rotate(45deg)}.project-grid.overview .spotlight:before{display:none}.project-grid.overview .spotlight .thumb{width:52px;height:52px;grid-row:1/4;border-radius:2px}.project-grid.overview .spotlight h3{font:700 20px/1.15 Space,sans-serif;letter-spacing:-.035em;margin:0 0 5px}.project-grid.overview .spotlight .stack{font-size:13px;color:#286779;line-height:1.25}.project-grid.overview .spotlight .brief{grid-column:2;grid-row:3;margin:10px 0 0;font-size:16px;line-height:1.25;color:#28424d}.feature-footer{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:12px;font:600 10px/1.3 monospace;letter-spacing:.04em;color:#236175;margin-top:14px}.feature-arrow{font:26px/1 Space,sans-serif;transition:transform .18s}.spotlight:hover .feature-arrow{transform:translate(3px,-2px)}.project-grid.overview .spotlight:first-child{background:var(--night);border-color:#324f59;color:#f3f8fa}.project-grid.overview .spotlight:first-child .stack{color:#a7d3de}.project-grid.overview .spotlight:first-child .brief{color:#dbe8ed}.project-grid.overview .spotlight:first-child .feature-footer{color:var(--lime)}.project-grid.overview .spotlight:hover{background:#d8eeec;box-shadow:inset 0 0 0 1px #71a8b6}.project-grid.overview .spotlight:first-child:hover{background:#1c2d33}.spotlight:focus-visible{outline:0;box-shadow:inset 0 0 0 3px #147184!important}.spotlight:first-child:focus-visible{box-shadow:inset 0 0 0 3px var(--lime)!important}.footer{border-top:1px solid var(--rule);margin-top:18px;color:#536e7b}.footer a{color:#254652}dialog{border-radius:3px;border-color:#7e9ba8;box-shadow:0 24px 100px #07131980}dialog::backdrop{background:#0a121acf;backdrop-filter:blur(7px)}.library-list span{border-radius:0;background:#edf3f4}.detail-actions button,.detail-actions a{border-radius:0}.proof-viewport{--ref-h:1135}.comparison-toolbar{background:var(--paper)}.cv-page{--blue:#125e73;--ink:#101b22;--rule:#cdd9df;background:var(--paper)}.cv-page .header{background:var(--night);max-width:none;padding-inline:max(24px,calc((100% - 1136px)/2));border-color:#3a4a52}.cv-page .header .brand,.cv-page .header nav a{color:#edf5f8}.cv-page .header .monogram{color:var(--lime)}.cv-page .header nav a:hover{color:var(--lime)}.cv-page .button{background:var(--night);color:var(--lime);border-color:var(--night)}.cv-page .portfolio-note{background:#e9f1ef;border-color:#6c9940}.cv-page .resume h1{font-size:46px}.cv-page .job>.eyebrow{color:#356a7a}.cv-page .eyebrow{display:block}@media(min-width:1300px){.stats-strip{padding-block:11px}.experience{min-height:106px;padding-block:13px}.project-toolbar{grid-template-columns:175px 185px minmax(0,1fr);gap:12px}.project-toolbar .shelf-tools{gap:10px}.project-toolbar .filters button{padding-inline:7px}.project-toolbar .view-switch button{padding-inline:8px}.project-toolbar .shelf-heading h2{font-size:23px}}@media(max-width:1200px){.hero-stage{height:264px}.hero h1{font-size:49px}.hero-description{font-size:18px;max-width:430px}.shader-wrap{width:55%}.stats-strip{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.3fr) 190px}.stat-cell{padding-inline:18px}.stats-scope{padding-left:18px}.experience{grid-template-columns:125px minmax(0,1fr);gap:12px}.experience-grid article{padding-inline:11px}.atlas-layout{grid-template-columns:170px minmax(0,1fr);padding-inline:22px}.language-rail{padding-right:17px}.project-grid.overview.has-spotlights{grid-template-columns:repeat(6,minmax(0,1fr))}.project-grid.overview .spotlight{padding:15px 12px 12px;column-gap:10px;grid-template-columns:36px minmax(0,1fr);min-height:185px}.project-grid.overview .spotlight .thumb{width:36px;height:36px}.project-grid.overview .spotlight h3{font-size:18px}.project-grid.overview .spotlight .stack{font-size:12px}.project-grid.overview .spotlight .brief{font-size:15px;grid-column:1/-1}.feature-footer{font-size:9px}.project-grid.overview .project-card:not(.spotlight){padding-inline:9px}}@media(max-width:1000px){.topbar{padding-inline:22px}.hero-copy{padding:30px 22px 0}.hero h1{font-size:44px}.hero-description{max-width:365px}.hero .eyebrow{font-size:9px;letter-spacing:.1em}.stats-strip{grid-template-columns:repeat(3,minmax(0,1fr)) minmax(0,1.3fr);padding:17px 22px 12px;min-height:0}.stats-scope{grid-column:1/-1;padding:13px 0 0;font-size:12px}.stats-scope:before{display:none}.experience{grid-template-columns:130px minmax(0,1fr);padding:18px 22px}.atlas-layout{grid-template-columns:151px minmax(0,1fr);padding-inline:18px}.language-rail{padding-right:14px}.project-grid.overview.has-spotlights{grid-template-columns:repeat(4,minmax(0,1fr))}.project-grid.overview .spotlight{grid-column:span 2;min-height:166px}.project-grid.overview .spotlight:first-child{grid-column:1/-1;grid-template-columns:52px minmax(0,1fr);min-height:138px;margin-right:0}.project-grid.overview .spotlight:first-child .thumb{width:52px;height:52px}.project-grid.overview .spotlight:first-child .brief{grid-column:2}.project-grid.overview .spotlight:first-child .feature-footer{margin-top:9px}.project-grid.overview .spotlight .brief{margin-top:7px}.project-grid.overview .project-card{min-height:126px}.feature-footer{font-size:10px}.field-register{display:none}.field-scale{left:6%;font-size:8px}.field-scale>span{display:none}}@media(max-width:760px){.topbar{height:56px;padding-inline:20px}.topbar .brand{font-size:22px}.cv-link{padding:7px 16px}.hero-stage{height:266px}.hero-copy{padding:27px 20px 0}.hero h1{font-size:clamp(33px,6.2vw,46px);max-width:590px}.hero-description{font-size:18px;max-width:340px}.hero-links{margin-top:22px;gap:30px}.shader-wrap{width:58%;opacity:.68;mask-image:linear-gradient(90deg,transparent,#000 60%)}.hero-stage:after{background:linear-gradient(90deg,var(--night),#10171b55 65%,transparent)}.field-scale{display:none}.instrument-bar{padding-inline:20px;gap:9px;min-height:38px}.shader-stack{display:none}.experiment-name{font-size:9px}.shader-controls{gap:3px}.shader-controls button,.shader-controls button:last-child{font-size:13px;min-height:28px;padding-inline:6px}.stat-cell{padding-inline:15px}.stat-cell strong{font-size:35px}.stat-cell>span:last-child{font-size:14px}.stat-code{font-size:8px}.stat-cell em{font-size:12px}.experience{display:block;padding:17px 20px}.section-heading{margin-bottom:15px}.experience .job-role{font-size:13px}.atlas-layout{padding-inline:15px;grid-template-columns:130px minmax(0,1fr)}.rail-heading h2{font-size:18px}.rail-note{font-size:12px}#language-list button{font-size:14px}.project-toolbar{padding-top:16px}.project-toolbar .shelf-tools{gap:9px}.project-toolbar .filters{flex-wrap:wrap;gap:4px}.project-toolbar .filters button{border:1px solid var(--rule);padding:5px 7px}.project-toolbar .filters [aria-pressed=true]{border-color:var(--night)}.project-grid.overview.has-spotlights{grid-template-columns:repeat(3,minmax(0,1fr))}.project-grid.overview .spotlight{grid-column:1/-1;min-height:132px;grid-template-columns:40px minmax(0,1fr);margin-right:0}.project-grid.overview .spotlight:first-child{grid-template-columns:40px minmax(0,1fr);min-height:132px}.project-grid.overview .spotlight:first-child .thumb,.project-grid.overview .spotlight .thumb{width:40px;height:40px}.project-grid.overview .spotlight .brief{grid-column:2}.project-grid.overview .spotlight .feature-footer{margin-top:8px}.project-grid.overview .project-card:not(.spotlight){min-height:128px}.cv-page .resume h1{font-size:38px}}@media(max-width:580px){.hero-stage{height:308px}.hero-copy{padding-top:28px}.hero .eyebrow{font-size:8px;margin-bottom:14px;letter-spacing:.1em}.hero h1{font-size:clamp(28px,7.55vw,42px);line-height:1.05;margin-bottom:13px;max-width:none}.hero-description{font-size:17px;max-width:270px;line-height:1.35}.hero-links{margin-top:24px;gap:26px}.explore-link{font-size:14px}.shader-wrap{height:150px;top:auto;bottom:-12px;width:63%;opacity:.8;mask-image:linear-gradient(90deg,transparent,#000 30%)}.hero-stage:after{background:linear-gradient(180deg,var(--night) 5%,transparent 63%)}.stats-strip{grid-template-columns:1fr 1fr;padding:16px 20px 13px;gap:14px 0}.stat-cell{padding-left:15px}.stat-cell:nth-child(3){padding-left:0}.stat-cell:nth-child(4){padding-left:15px}.stat-cell strong{font-size:35px}.stat-cell em{display:block;margin-left:0;margin-top:3px}.stats-scope{padding-top:0;font-size:12px}.stat-code{font-size:9px;white-space:normal}.experience h3{font-size:16px}.experience .job-role{font-size:13px}.atlas-layout{display:block;padding:0 14px}.language-rail{padding:18px 6px 6px}.rail-heading h2{font-size:19px}.rail-note{font-size:12px}.rail-note br{display:none}#language-list{gap:6px;margin-top:10px}#language-list button{padding:7px 9px 9px;border:1px solid var(--rule);gap:9px;font-size:14px;min-height:36px}#language-list button:before{bottom:0;height:2px}#language-list i{bottom:0;height:2px}#language-list [aria-pressed=true]{background:var(--night);color:#fff;border-color:var(--night)}#language-list [aria-pressed=true] b{color:var(--lime)}#projects{padding-inline:6px}.project-toolbar{padding-top:16px}.project-toolbar .filters{gap:4px}.project-toolbar .filters button{min-height:33px;padding-inline:8px;font-size:13px}.project-toolbar .view-switch{margin-left:auto}.project-toolbar .view-switch button{padding-inline:11px;min-height:32px}.project-grid.overview .spotlight,.project-grid.overview .spotlight:first-child{display:grid;grid-template-columns:48px minmax(0,1fr);grid-template-rows:min-content min-content 1fr min-content;column-gap:13px;min-height:142px;padding:17px 15px 12px;margin-bottom:10px}.project-grid.overview .spotlight .thumb,.project-grid.overview .spotlight:first-child .thumb{width:48px;height:48px;margin-bottom:0;grid-row:1/4}.project-grid.overview .spotlight h3{font-size:20px}.project-grid.overview .spotlight .stack{font-size:13px}.project-grid.overview .spotlight .brief{font-size:15px;grid-column:2;margin-top:8px}.feature-footer{font-size:9px}.project-grid.overview .project-card:not(.spotlight){min-height:150px;padding:12px 9px}.project-grid.overview .project-card:not(.spotlight) .thumb{margin-bottom:8px}.cv-page .header{padding-inline:20px}.cv-page .resume h1{font-size:36px}}@media(max-width:380px){.topbar{padding-inline:18px}.topbar .brand{font-size:21px}.cv-link{padding-inline:11px;font-size:14px}.hero-copy{padding-inline:18px}.hero-stage{height:300px}.hero h1{font-size:27px}.hero-description{font-size:16px;max-width:255px}.hero-links{margin-top:21px}.shader-wrap{bottom:-16px;width:60%;height:139px}.instrument-bar{padding-inline:16px;gap:4px}.experiment-name,.experiment-name b{font-size:8px}.shader-controls{gap:1px}.shader-controls button,.shader-controls button:last-child{padding-inline:5px;font-size:12px}.project-grid.overview.has-spotlights{grid-template-columns:repeat(2,minmax(0,1fr))}.stats-strip{padding-inline:18px}.stat-cell strong{font-size:33px}.stat-code{font-size:8px}.stat-cell>span:last-child{font-size:14px}.project-toolbar .filters button{padding-inline:6px}.experience{padding-inline:18px}.project-grid.overview .spotlight,.project-grid.overview .spotlight:first-child{grid-template-columns:40px minmax(0,1fr);column-gap:10px;padding-inline:12px}.project-grid.overview .spotlight .thumb,.project-grid.overview .spotlight:first-child .thumb{width:40px;height:40px}.project-grid.overview .spotlight h3{font-size:19px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important}.spotlight:hover .feature-arrow{transform:none}}@media print{.hero,.topbar{display:none}.project-grid.overview .spotlight{clip-path:none;break-inside:avoid;color:#101b22!important;background:#fff!important}.spotlight .brief,.spotlight .stack,.feature-footer{color:#101b22!important}.cv-page .header{display:none}.cv-page{background:#fff}.cv-page .resume h1{font-size:31px}}:root,body[data-theme=cerulean]{--accent:#08799e;--accent-soft:#9ec4d5;--accent-deep:#19566c;--night:#10242c;--paper:#f3f6f7;--rule:#c4d4da;--ink:#17303b;--muted:#506b78;--hatch:#356b8210;--blue:var(--accent);--lime:var(--accent-soft);--orange:var(--accent)}body[data-theme=forest]{--accent:#2c664a;--accent-soft:#a4c0ad;--accent-deep:#2b5140;--night:#152b23;--paper:#f3f6f2;--rule:#c5d3c9;--ink:#20392c;--muted:#526c5b;--hatch:#365e4411;--blue:var(--accent);--lime:var(--accent-soft);--orange:var(--accent)}body:not([data-theme]),body[data-theme=phthalo]{--accent:#006e63;--accent-soft:#91beb5;--accent-deep:#15584f;--night:#0c2a28;--paper:#f1f6f4;--rule:#bbd2ca;--ink:#153c36;--muted:#456d63;--hatch:#17695c10;--blue:var(--accent);--lime:var(--accent-soft);--orange:var(--accent)}body{--graph-line:color-mix(in srgb,var(--accent) 5%,transparent);--graph-major:color-mix(in srgb,var(--accent) 7%,transparent);--graph-paper:linear-gradient(var(--graph-major) 1px,transparent 1px),linear-gradient(90deg,var(--graph-major) 1px,transparent 1px),linear-gradient(var(--graph-line) 1px,transparent 1px),linear-gradient(90deg,var(--graph-line) 1px,transparent 1px);background-color:var(--paper);background-image:var(--graph-paper);background-size:120px 120px,120px 120px,24px 24px,24px 24px}.page-root{background:var(--paper)}.topbar,.hero,.stats-strip,.instrument-bar{background-color:var(--night)}.topbar{border-color:color-mix(in srgb,var(--accent-soft) 25%,var(--night))}.topbar .monogram{color:var(--accent-soft)}.cv-link,.customize-button{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:none}.cv-link:hover,.customize-button:hover{background:var(--accent-deep);color:#fff}.hero h1 span{color:var(--accent-soft)}.hero h1{text-shadow:none}.hero-stage{background-color:var(--night);background-image:repeating-linear-gradient(45deg,transparent 0 8px,#aac8d608 8px 9px),repeating-linear-gradient(-45deg,transparent 0 8px,#aac8d608 8px 9px)}.hero-stage:after{background:linear-gradient(90deg,var(--night) 3%,transparent 80%)}.hero .eyebrow,.hero-description{color:color-mix(in srgb,var(--accent-soft) 40%,#fff)}.hero .explore-link{color:#e7eff0;border-color:var(--accent-soft)}.hero .explore-link:hover{color:var(--accent-soft)}.shader-mix input{accent-color:var(--accent-soft)}.shader-controls button:hover{background:color-mix(in srgb,var(--accent) 20%,var(--night));color:#fff}.shader-fallback{border-color:var(--accent-soft);box-shadow:0 0 30px color-mix(in srgb,var(--accent) 25%,transparent)}.stat-cell:hover strong,.stats-scope:before,.stat-code i{color:var(--accent-soft)}.stat-cell em{color:var(--accent-soft)}.experience{background:transparent}.experience h3,.section-heading h2,.shelf-heading h2{color:var(--ink)}.section-heading>a,.rail-cv,.footer a{color:var(--accent-deep)}#language-list i{background:var(--accent-soft)}#language-list [aria-pressed=true] i{background:var(--accent)}#language-list [aria-pressed=true] b{color:var(--ink)}.search,.project-toolbar .search{background:color-mix(in srgb,var(--paper) 85%,transparent)}.search:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 15%,transparent)}#active-filters{background:color-mix(in srgb,var(--accent) 9%,var(--paper));color:var(--accent-deep)}.project-grid.overview .spotlight{background:color-mix(in srgb,var(--accent) 7%,var(--paper));border-color:var(--rule);border-bottom-color:var(--kind)}.project-grid.overview .spotlight:nth-child(3){background:color-mix(in srgb,var(--accent) 11%,var(--paper))}.project-grid.overview .spotlight:first-child{background:var(--night);border-color:var(--accent-deep);border-bottom-color:var(--kind)}.project-grid.overview .spotlight:first-child .feature-footer{color:var(--accent-soft)}.project-grid.overview .spotlight:hover{background:color-mix(in srgb,var(--accent) 15%,var(--paper))}.project-grid.overview .spotlight:first-child:hover{background:color-mix(in srgb,var(--accent) 16%,var(--night))}.project-grid.overview .spotlight .stack,.feature-footer{color:var(--accent-deep)}.project-grid.overview .spotlight:first-child .stack{color:var(--accent-soft)}.project-grid.overview .spotlight .brief{color:var(--ink)}.project-grid.overview .spotlight:first-child .brief{color:#d8e5e9}.project-card:hover{background:color-mix(in srgb,var(--accent) 7%,var(--paper));box-shadow:inset 0 0 0 1px var(--rule)}.spotlight:first-child:focus-visible{box-shadow:inset 0 0 0 3px var(--accent-soft)!important}.metric-tile{background:color-mix(in srgb,var(--paper) 88%,#fff)}.metric-tile:hover{background:color-mix(in srgb,var(--accent) 8%,var(--paper))}.metric-action,.capability-table button{color:var(--accent-deep)}.capability-table th{background:color-mix(in srgb,var(--accent) 9%,var(--paper))}.capability-table tr:hover{background:color-mix(in srgb,var(--accent) 6%,var(--paper))}.matrix-scroll{position:relative;max-width:100%;min-width:0}.matrix-dot{vertical-align:middle}.preference-grid input{accent-color:var(--accent)}.preference-presets button:hover,.library-list span{background:color-mix(in srgb,var(--accent) 7%,var(--paper))}.preference-row select{background:var(--paper)}dialog{background:var(--paper);border-color:var(--rule)}dialog::backdrop{background:color-mix(in srgb,var(--night) 85%,transparent)}::selection{background:var(--accent-soft);color:var(--night)}.atlas-layout,.exploration-section,.experience,.footer,.review-tools{background-color:var(--paper)}.hero-stage{background-image:linear-gradient(#a6d3cb06 1px,transparent 1px),linear-gradient(90deg,#a6d3cb06 1px,transparent 1px);background-size:32px 32px}.hero-copy{background:linear-gradient(90deg,var(--night) 0%,var(--night) 31%,color-mix(in srgb,var(--night) 96%,transparent) 45%,transparent 64%)}body[data-texture=off],body[data-texture=off] .page-root,body[data-texture=off] .hero-stage{background-image:none}.cv-page{background-color:var(--paper);background-image:repeating-linear-gradient(45deg,transparent 0 5px,var(--hatch) 5px 6px),repeating-linear-gradient(-45deg,transparent 0 5px,var(--hatch) 5px 6px)}.cv-page .header{background:var(--night)}.cv-page .header .monogram{color:var(--accent-soft)}.cv-page .button{background:var(--accent);color:#fff;border-color:var(--accent)}.cv-page .portfolio-note{background:color-mix(in srgb,var(--accent) 7%,var(--paper));border-color:var(--accent)}.cv-page .job>.eyebrow{color:var(--accent)}.cv-page[data-texture=off]{background-image:none}@media(max-width:580px){#language-list [aria-pressed=true]{background:var(--night);border-color:var(--night);color:#fff}#language-list [aria-pressed=true] b{color:var(--accent-soft)}.hero-stage:after{background:linear-gradient(90deg,var(--night) 2%,transparent)}.shader-wrap{opacity:.7}}.cv-page{background-image:var(--graph-paper);background-size:120px 120px,120px 120px,24px 24px,24px 24px}.cv-page main{max-width:1200px;margin:20px auto;background:var(--paper);border:1px solid color-mix(in srgb,var(--rule) 65%,var(--paper));border-radius:8px;box-shadow:0 5px 22px #123b3206}.cv-page footer{background:var(--paper)}.cv-page .header{color:#edf5f2}.cv-page .header nav a{color:#c5ded7}.cv-page .header nav [aria-current]{color:#fff;border-bottom-color:var(--accent-soft)}@media(max-width:1240px){.cv-page main{margin:16px 18px}}@media(max-width:580px){.cv-page main{margin:12px 8px}.hero-copy{background:linear-gradient(90deg,var(--night),color-mix(in srgb,var(--night) 94%,transparent) 68%,transparent)}}@media print{body,.page-root,.cv-page,.cv-page main{background:#fff!important;background-image:none!important}.cv-page main{margin:0;border:0;box-shadow:none}}body.tactile-portfolio,.blockprint .sample,.cv-page{--tile-edge:color-mix(in srgb,var(--accent) 38%,var(--ink));--tile-face:color-mix(in srgb,var(--accent) 3%,var(--paper));--tile-highlight:color-mix(in srgb,var(--paper) 70%,white);--tile-side:color-mix(in srgb,var(--accent) 24%,var(--paper));--tile-shadow:color-mix(in srgb,var(--ink) 18%,transparent);--tile-raised:inset 0 2px 0 var(--tile-highlight),inset 2px 0 0 #ffffff75,inset -1px -2px 0 var(--tile-side),0 4px 0 var(--tile-side),0 5px 0 var(--tile-edge),1px 7px 8px var(--tile-shadow);--tile-hover:inset 0 2px 0 var(--tile-highlight),inset 2px 0 0 #ffffff80,inset -1px -2px 0 var(--tile-side),0 6px 0 var(--tile-side),0 7px 0 var(--tile-edge),1px 10px 11px var(--tile-shadow);--tile-pressed:inset 0 1px 3px var(--tile-shadow),0 1px 0 var(--tile-edge),0 2px 3px var(--tile-shadow)}body.tactile-portfolio{--usage-0:#08799e;--usage-1:#326747;--usage-2:#087465;--usage-3:#496e84}body.tactile-portfolio .atlas-layout{padding-bottom:15px}body.tactile-portfolio .project-grid.overview{grid-template-columns:repeat(auto-fill,minmax(166px,1fr));gap:13px 12px;padding:13px 14px 22px;border:1px solid var(--rule);border-radius:7px;background-color:color-mix(in srgb,var(--accent) 6%,var(--paper));background-image:var(--graph-paper);background-size:120px 120px,120px 120px,24px 24px,24px 24px;box-shadow:inset 0 2px 5px var(--tile-shadow),0 1px #ffffffd0}body.tactile-portfolio .project-card{--kind:#256878}body.tactile-portfolio .project-card[data-kind=Software]{--kind:#167b9c}body.tactile-portfolio .project-card[data-kind=Games]{--kind:#316d52}body.tactile-portfolio .project-card[data-kind=Hardware]{--kind:#245d46}body.tactile-portfolio .project-card[data-kind=Creative]{--kind:#08766a}body.tactile-portfolio .project-card[data-kind=Research]{--kind:#3e637d}body.tactile-portfolio .project-grid.overview .project-card{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;grid-column:auto;grid-row:auto;aspect-ratio:1;min-height:0;min-width:0;margin:0;padding:11px 11px 10px;gap:4px;border:1px solid var(--tile-edge);border-bottom-width:1px;border-radius:5px;background-color:var(--tile-face);background-image:linear-gradient(145deg,#ffffff55,transparent 47%,#00000003);color:var(--ink);box-shadow:var(--tile-raised);clip-path:none;overflow:visible;transition:transform .14s ease,box-shadow .14s ease,background-color .14s ease}body.tactile-portfolio[data-colors=vivid] .project-grid.overview .project-card:not(.spotlight){--tile-face:color-mix(in srgb,var(--kind) 7%,var(--paper))}body.tactile-portfolio .project-grid.overview .project-card:before{display:none}body.tactile-portfolio .project-grid.overview .project-card :is(.project-number,.category-mark,.technical,.kind-label,.feature-footer){display:none}body.tactile-portfolio .project-grid.overview .project-card .thumb{display:block;position:relative;flex:none;width:44px;height:44px;margin:0 0 4px;border:1px solid color-mix(in srgb,var(--rule) 70%,var(--ink));border-radius:5px;box-shadow:0 1px #ffffffbd,inset 0 1px 3px #17303b29;outline:3px solid color-mix(in srgb,var(--accent-soft) 28%,var(--paper));outline-offset:0}body.tactile-portfolio .project-grid.overview .project-card .thumb.symbol{display:grid;place-items:center;font-size:20px}body.tactile-portfolio .project-grid.overview .project-card h3{font:700 16px/1.1 Space,sans-serif;letter-spacing:-.035em;color:inherit;margin:0;width:100%;overflow-wrap:anywhere}body.tactile-portfolio .project-grid.overview .project-card .stack{font:400 13px/1.25 Plex,sans-serif;color:var(--accent-deep);margin:1px 0 0;display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0}body.tactile-portfolio .project-grid.overview .project-card .brief{display:block;font:400 14px/1.2 Plex,sans-serif;color:var(--muted);margin:3px 0 0;border:0;padding:0;letter-spacing:0;overflow-wrap:anywhere}body.tactile-portfolio .project-grid.overview .project-card.spotlight{--tile-face:color-mix(in srgb,var(--accent) 11%,var(--paper));background-color:var(--tile-face);border-color:var(--tile-edge)}body.tactile-portfolio .project-grid.overview .project-card.spotlight:first-child{--tile-highlight:color-mix(in srgb,var(--accent) 58%,var(--paper));--tile-side:var(--accent-deep);--tile-edge:var(--night);background-color:var(--accent);color:#fff;background-image:linear-gradient(150deg,#ffffff16,transparent 70%);box-shadow:var(--tile-raised)}body.tactile-portfolio .project-grid.overview .project-card.spotlight:first-child :is(.stack,.brief){color:#edf7f8}body.tactile-portfolio .project-grid.overview .project-card:hover{transform:translateY(-2px);background-color:color-mix(in srgb,var(--tile-face) 90%,white);box-shadow:var(--tile-hover);z-index:1}body.tactile-portfolio .project-grid.overview .project-card.spotlight:first-child:hover{background-color:var(--accent-deep)}body.tactile-portfolio .project-grid.overview .project-card:active{transform:translateY(4px);box-shadow:var(--tile-pressed)}body.tactile-portfolio .project-grid.overview .project-card:focus-visible{outline:3px solid var(--accent);outline-offset:6px;box-shadow:var(--tile-raised)!important;z-index:2}body.tactile-portfolio .project-grid.overview .project-card.spotlight:first-child:focus-visible{outline-color:var(--accent-soft)}body.tactile-portfolio .project-grid:not(.overview):not(.index){gap:12px;padding:8px 5px 16px 0}body.tactile-portfolio .project-grid:not(.overview):not(.index) .project-card{border:1px solid var(--tile-edge);border-radius:5px;background-color:var(--tile-face);box-shadow:var(--tile-raised)}body.tactile-portfolio .project-grid.index .project-card{border-bottom:1px solid var(--rule)}body.tactile-portfolio :is(.facet-button,.filters button,.view-switch button,.preference-presets button){border:1px solid var(--rule);border-radius:3px;background:linear-gradient(150deg,#ffffff75,transparent 75%),var(--paper);box-shadow:inset 0 1px #fff,0 2px 0 var(--rule),0 3px color-mix(in srgb,var(--rule) 72%,var(--ink));transition:transform .12s,box-shadow .12s;background-clip:padding-box}body.tactile-portfolio :is(.facet-button,.filters button,.view-switch button,.preference-presets button):active{transform:translateY(2px);box-shadow:inset 0 1px 3px var(--tile-shadow),0 1px 0 var(--rule)}body.tactile-portfolio :is(.facet-button,.filters button,.view-switch button)[aria-pressed=true]{background:var(--accent-deep);border-color:var(--accent-deep);color:#fff;box-shadow:inset 0 2px 4px #0003,0 1px #ffffffbf;transform:translateY(2px)}body.tactile-portfolio :is(.facet-button,.filters button,.view-switch button)[aria-pressed=true] b{color:#e3f1f1}body.tactile-portfolio .view-switch{background:transparent;gap:4px;border:0;display:flex;padding:0 0 3px}body.tactile-portfolio .filters{gap:6px}body.tactile-portfolio :is(.kind-filters,.capability-filters){gap:7px;padding-bottom:5px}body.tactile-portfolio .facet-button{--facet:var(--accent)!important}body.tactile-portfolio .facet-button[data-kind=Software]{--facet:#167b9c!important}body.tactile-portfolio .facet-button[data-kind=Games]{--facet:#316d52!important}body.tactile-portfolio .facet-button[data-kind=Hardware]{--facet:#245d46!important}body.tactile-portfolio .facet-button[data-kind=Creative]{--facet:#08766a!important}body.tactile-portfolio .facet-button[data-kind=Research]{--facet:#3e637d!important}body.tactile-portfolio .metric-tile{--facet:var(--accent)!important;border-radius:4px;box-shadow:0 2px 0 var(--rule),inset 0 1px #fff}body.tactile-portfolio .matrix-dot{background:var(--accent)}body.tactile-portfolio .search{border:1px solid var(--rule);border-radius:4px;box-shadow:inset 0 2px 3px var(--tile-shadow),0 1px #ffffffd9;background:var(--paper)}body.tactile-portfolio :is(.customize-button,.cv-link),.cv-page .button{background-color:var(--accent);background-image:linear-gradient(155deg,#ffffff1e,transparent 70%);color:#fff;border:1px solid var(--accent-deep);border-radius:4px;box-shadow:inset 0 2px #ffffff38,0 3px 0 var(--accent-deep),0 4px 0 var(--night),0 6px 7px #0002;transition:transform .12s,box-shadow .12s}body.tactile-portfolio :is(.customize-button,.cv-link):hover,.cv-page .button:hover{background-color:var(--accent-deep)}body.tactile-portfolio :is(.customize-button,.cv-link):active,.cv-page .button:active{transform:translateY(3px);box-shadow:inset 0 1px 3px #0003,0 1px 0 var(--night)}body.tactile-portfolio .shader-controls button{border:1px solid #c3d8d62b;border-radius:3px;padding:3px 8px;background:#ffffff09;box-shadow:inset 0 1px #ffffff14,0 2px #0005}body.tactile-portfolio .shader-controls button:active{transform:translateY(2px);box-shadow:inset 0 1px 3px #0005}body.tactile-portfolio .shader-mix input{filter:drop-shadow(0 2px 1px #0005)}body.tactile-portfolio .topbar{box-shadow:inset 0 1px #ffffff10,0 1px #0005}body.tactile-portfolio[data-density=roomy] .project-grid.overview .project-card{padding:15px;min-height:195px}body.tactile-portfolio[data-texture=off] .project-grid.overview{background-image:none}.blockprint .sample{--night:var(--dark);--accent-soft:var(--soft);--accent-deep:var(--ink);border:1px solid var(--tile-edge);border-radius:7px;background-color:color-mix(in srgb,var(--accent) 5%,var(--paper));box-shadow:inset 0 2px 5px var(--tile-shadow),0 3px 0 var(--rule),0 4px 0 var(--tile-edge)}.blockprint .sample .sample-cards{gap:13px 11px;padding-bottom:5px}.blockprint .sample .sample-card{border:1px solid var(--tile-edge);border-radius:5px;background-color:var(--tile-face);background-image:linear-gradient(145deg,#ffffff55,transparent 47%,#00000003);box-shadow:var(--tile-raised);transition:transform .14s,box-shadow .14s}.blockprint .sample .sample-card .thumb{border-radius:5px;border:1px solid var(--rule);outline:3px solid color-mix(in srgb,var(--soft) 30%,var(--paper));box-shadow:inset 0 1px 3px #17303b30,0 1px #fff8}.blockprint .sample .sample-card:first-child{--tile-highlight:color-mix(in srgb,var(--accent) 60%,var(--paper));--tile-side:color-mix(in srgb,var(--accent) 65%,var(--ink));background-color:var(--accent);background-image:linear-gradient(150deg,#ffffff12,transparent);color:#fff}.blockprint .sample .sample-card:hover{transform:translateY(-2px);box-shadow:var(--tile-hover)}.blockprint .sample .sample-card:active{transform:translateY(4px);box-shadow:var(--tile-pressed)}.blockprint .sample :is(.primary-action,.secondary-action){border:1px solid var(--tile-edge);border-radius:4px;box-shadow:inset 0 2px #fff5,0 3px 0 var(--tile-side),0 4px 0 var(--tile-edge),0 6px 7px var(--tile-shadow);background-image:linear-gradient(150deg,#ffffff20,transparent 80%)}.blockprint .sample .primary-action{box-shadow:inset 0 2px #ffffff38,0 3px 0 var(--ink),0 4px 0 var(--tile-edge),0 6px 7px var(--tile-shadow)}.blockprint .sample :is(.primary-action,.secondary-action):active,.blockprint .sample .secondary-action[aria-pressed=true]{transform:translateY(3px);box-shadow:var(--tile-pressed)}.blockprint .sample .sample-head>span{box-shadow:inset 0 1px 3px var(--tile-shadow);transform:rotate(-3deg)}@media(max-width:1200px){body.tactile-portfolio .project-toolbar{grid-template-columns:1fr 1fr;gap:10px}body.tactile-portfolio .project-toolbar .shelf-tools{grid-column:1/-1;flex-wrap:wrap}}@media(max-width:760px){body.tactile-portfolio .project-grid.overview{grid-template-columns:repeat(3,minmax(0,1fr));padding:11px 11px 20px;gap:13px 10px}body.tactile-portfolio .atlas-layout{display:block;padding-inline:14px}body.tactile-portfolio .language-rail{position:static;border:0;padding:14px 6px 5px}body.tactile-portfolio #language-list{flex-direction:row;flex-wrap:nowrap;overflow:auto;gap:6px;padding-bottom:4px}body.tactile-portfolio #language-list button{flex:none;padding:7px 9px 10px;border:1px solid var(--rule);gap:10px}body.tactile-portfolio .rail-footnote,body.tactile-portfolio .rail-cv{display:none}body.tactile-portfolio #projects{padding-inline:6px}body.tactile-portfolio .project-toolbar{grid-template-columns:1fr}body.tactile-portfolio .project-grid.overview .project-card{padding:10px;gap:3px}body.tactile-portfolio .project-grid.overview .project-card .thumb{width:40px;height:40px}}@media(max-width:580px){body.tactile-portfolio .project-grid.overview{grid-template-columns:repeat(2,minmax(0,1fr));padding:10px 10px 20px}body.tactile-portfolio .project-grid.overview .project-card h3{font-size:16px}body.tactile-portfolio .project-grid.overview .project-card .brief{font-size:14px}body.tactile-portfolio .view-switch{margin-left:0}body.tactile-portfolio .project-toolbar .shelf-tools{gap:10px}body.tactile-portfolio .hero-links{gap:24px}}@media(max-width:380px){body.tactile-portfolio .project-grid.overview .project-card .brief{display:none}body.tactile-portfolio .project-grid.overview .project-card h3{font-size:15px}body.tactile-portfolio .project-grid.overview .project-card .thumb{width:35px;height:35px}body.tactile-portfolio .project-grid.overview{gap:12px 9px;padding:9px 9px 18px}body.tactile-portfolio .project-grid.overview .project-card{padding:9px 8px}body.tactile-portfolio .project-grid.overview .project-card .stack{font-size:12px}body.tactile-portfolio .shader-controls button{padding-inline:5px}}@media(min-width:381px)and (max-width:580px){body.tactile-portfolio .project-grid.overview .project-card .brief{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex-shrink:0}}@media(prefers-reduced-motion:reduce){body.tactile-portfolio .project-card,.blockprint .sample .sample-card{transition:none!important}body.tactile-portfolio .project-card:hover,.blockprint .sample .sample-card:hover{transform:none}}@media print{body.tactile-portfolio .project-grid.overview,.blockprint .sample{background:#fff;box-shadow:none;border:0}body.tactile-portfolio .project-grid.overview .project-card,.blockprint .sample .sample-card{box-shadow:none!important;transform:none!important;background:#fff!important;color:#000!important;break-inside:avoid}body.tactile-portfolio .project-grid.overview .project-card :is(.stack,.brief){color:#222!important}}body.cabinet{--ink:#153530;--muted:#5b706b;--paper:#f8faf9;--graph-line:#17695c06;--graph-major:#17695c0b;background-color:#f2f6f4;padding:16px 24px 32px}body.cabinet .page-root{max-width:1440px;background:#fff;border:1px solid #dfe8e3;border-radius:18px;box-shadow:0 4px 24px #183f2f06;padding:0 28px}body.cabinet .topbar{padding:20px 4px;gap:28px;min-height:80px}body.cabinet .brand{font-size:25px;letter-spacing:-.7px}body.cabinet .topbar nav a{font-size:15px;color:#48625a}body.cabinet .hero{background:#fff;border:0;box-shadow:none;border-radius:0}body.cabinet .hero-stage{background:none;border-radius:0;padding:12px 0 28px;gap:28px}body.cabinet .hero-copy{padding:12px 12px 12px 4px}body.cabinet .hero-copy>.eyebrow{display:block;color:var(--accent-deep);font:600 13px/1.4 Plex,sans-serif;letter-spacing:.065em;text-transform:uppercase;margin:0 0 16px}body.cabinet h1{font-size:clamp(38px,4.4vw,62px);line-height:1.02;letter-spacing:-2px;margin-bottom:18px}body.cabinet .hero-description{font-size:17px;line-height:1.5;color:#405b53}body.cabinet .learning-note{font-size:15px;line-height:1.4;color:#61766f;margin-top:18px}body.cabinet .learning-note:before{display:none}body.cabinet .shader-wrap{border-radius:15px;box-shadow:inset 0 1px 1px #ffffff20,0 3px 12px #123e2c0d}body.cabinet #projects{border-top:1px solid #dfe7e3;padding-top:28px}body.cabinet #shelf-title{font-size:29px!important;letter-spacing:-.8px}body.cabinet .shelf-head{margin-bottom:16px;gap:18px}body.cabinet .search{border-radius:10px;background:#fff;box-shadow:none;border-color:#cad9d1}body.playful.cabinet :is(.cv-link,.explore-link,button):where(:not(.project-card):not(.stat-cell):not([data-theme-set]):not(#goo-pump):not(#pause-shader):not(#reset-shader)){border-radius:10px;background:#fff;border-color:#cfddd5;box-shadow:inset 0 1px #fff,0 2px 3px #123e2c09;color:var(--ink)}body.playful.cabinet :is(.topbar>.cv-link,#kind-filters [aria-pressed=true],.sort-segments [aria-pressed=true],.dialog-done){background:var(--accent-deep);border-color:var(--accent-deep);color:#fff;box-shadow:inset 0 1px #ffffff14,0 2px 4px #0e3e2a14}body.playful.cabinet #kind-filters .facet-button{border-radius:10px;min-height:44px;box-shadow:none}body.cabinet .theme-swatches button,body.cabinet .theme-swatches span{box-shadow:none}body.cabinet .motion-control{border-radius:10px;background:#fff;box-shadow:none}body.cabinet .priority-control,body.cabinet .sort-segments{border-radius:10px;box-shadow:none;background:#fff}body.cabinet .priority-icons i{box-shadow:none;width:25px;height:25px;font-size:18px}body.playful.cabinet .sort-segments button{border:0;box-shadow:none}body.playful.cabinet .sort-segments button[aria-disabled=true]{display:none}body.playful.cabinet button.metrics-help{border:0;box-shadow:none;background:none;color:var(--muted)}body.cabinet #project-grid,body.cabinet #project-grid.overview{gap:18px}body.cabinet #project-grid .project-card{padding:16px 16px 0;border:1px solid #dce6e0;border-radius:14px;background:#fff;box-shadow:0 2px 7px #183f2f08}body.cabinet #project-grid .card-heading{grid-template-columns:112px minmax(0,1fr);gap:16px;padding-bottom:16px}body.cabinet #project-grid .thumb{border-radius:10px;box-shadow:inset 0 0 0 1px #123e3017,0 3px 6px #163c2c0a}body.cabinet #project-grid h3{font-size:19px;line-height:1.17;letter-spacing:-.4px;margin-bottom:8px}body.cabinet #project-grid .brief{font-size:16px;line-height:1.38;color:#28453b}body.cabinet #project-grid .technical{font-size:14px;line-height:1.4;color:#60756c}body.cabinet #project-grid .brief .concept{color:var(--ink);font-weight:600}body.cabinet #project-grid .technical .concept{color:#365f60;font-weight:600}body.cabinet #project-grid .stack-token{border-radius:5px;background:#f1f5f3;color:#446359;padding:4px 6px}body.cabinet #project-grid .project-signals,body.cabinet #project-grid .card-metrics{border-color:#e6ede8;padding-block:11px}body.cabinet #project-grid .project-signals .model-chip{border-radius:6px}body.cabinet .filter-drawer,body.cabinet .collection-depth{border-radius:12px;border-color:#dbe5de;background:#fbfdfc;box-shadow:none}body.cabinet .experience-grid article{border-radius:12px;box-shadow:none;background:#fff}body.cabinet .footer{border-top:1px solid #e1e9e3;background:#fff;color:#526c60}@media(hover:hover){body.cabinet[data-motion=on] #project-grid .project-card:hover{transform:translateY(-2px);border-color:#97b4a5;box-shadow:0 7px 18px #163c2c10}}html.dialog-open{overflow:hidden;scrollbar-gutter:stable}body.playful.cabinet dialog{padding:0;width:calc(100% - 32px);max-width:760px;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);border:1px solid #c4d4cb;border-radius:16px;background:#fff;box-shadow:0 28px 100px #072a284d;overflow:hidden;color:var(--ink)}body.playful.cabinet dialog[open]{display:flex;flex-direction:column}body.playful.cabinet dialog:not([open]){display:none}body.playful.cabinet dialog::backdrop{background:#142e2c85;backdrop-filter:blur(3px)}.dialog-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 18px;border-bottom:1px solid #e0e9e3;background:#fbfdfc;flex:none;position:relative;z-index:3}.dialog-label{font:600 14px/1.4 Plex,sans-serif;color:#49665a}body.playful.cabinet dialog .close{position:static;margin:0;min-width:102px;min-height:48px;padding:10px 15px;gap:8px;color:#173e31;border:1px solid #a8c0b2;background:#fff;box-shadow:0 2px 4px #123e2c0a;flex-shrink:0;font-size:16px}dialog .close>span{font:24px/1 sans-serif}.dialog-content{min-height:0;overflow:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:24px 28px;scrollbar-gutter:stable;flex:1 1 auto}.dialog-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:none;position:relative;z-index:3;padding:12px 18px;border-top:1px solid #e0e9e3;background:#fbfdfc}.dialog-dismiss-hint{font:13px/1.4 Plex,sans-serif;color:#61766b}body.playful.cabinet .dialog-done{min-width:108px;min-height:48px;padding:10px 20px;font-size:16px}body.playful.cabinet :is(#project-detail,#usage-detail,#customize-dialog,#metric-detail) .dialog-toolbar>.close{min-width:102px;min-height:48px}body.playful.cabinet :is(#project-detail,#usage-detail,#customize-dialog,#metric-detail) .dialog-footer>.dialog-done{min-width:108px;min-height:48px}body.cabinet dialog .detail-summary{font:500 22px/1.4 Space,sans-serif;letter-spacing:-.5px}body.cabinet dialog .detail-technical{font-size:16px;line-height:1.55}body.cabinet dialog .detail-subheading{font:600 14px/1.4 Plex,sans-serif;letter-spacing:.025em;color:#456958}body.cabinet dialog .detail-heading{align-items:flex-start;gap:18px}body.cabinet dialog .detail-heading h2{font-size:28px;line-height:1.15}body.cabinet dialog .library-list span{font-size:14px;border-radius:6px;background:#f4f7f5;border-color:#e0e8e2}body.cabinet dialog .detail-actions{gap:10px}body.cabinet dialog .detail-actions a{min-height:44px;display:inline-flex;align-items:center;padding:10px 14px;border-radius:9px;background:var(--accent-deep);color:#fff}body.cabinet dialog .preference-note{max-width:55ch;color:#556f60}body.cabinet :is(button,a,input,select,summary):focus-visible{outline:3px solid #288aa3;outline-offset:3px}body.cv-page{background-color:#f7faf8;--graph-line:#17695c05;--graph-major:#17695c08}body.cv-page .header{background:#fff;color:var(--ink);border-bottom:1px solid #dbe5dd}body.cv-page .header :is(.brand,nav a){color:var(--ink)}body.cv-page .resume{background:#fff;border:1px solid #e1e9e2;border-radius:12px;box-shadow:none}body.cv-page .job{border-color:#e1e9e2}body.cv-page .button{border-radius:9px;box-shadow:0 2px 4px #163c2c12}@media(max-width:1100px){body.cabinet #project-grid .card-heading{grid-template-columns:104px minmax(0,1fr);gap:13px}}@media(max-width:650px){body.cabinet{padding:6px 8px 20px}body.cabinet .page-root{padding:0 14px;border-radius:12px}body.cabinet .topbar{padding:14px 0;gap:10px}body.cabinet .brand{font-size:23px}body.cabinet .hero-stage{padding:14px 0 22px;gap:18px}body.cabinet .hero-copy{padding:0}body.cabinet .hero-copy>.eyebrow{font-size:12px;margin-bottom:12px}body.cabinet h1{font-size:38px;letter-spacing:-1.4px;margin-bottom:14px}body.cabinet .hero-description{font-size:16px;line-height:1.45}body.cabinet .learning-note{margin-top:12px}body.cabinet #projects{padding-top:22px}body.cabinet #project-grid .project-card{padding:14px 14px 0;border-radius:12px}body.cabinet #project-grid .card-heading{grid-template-columns:96px minmax(0,1fr);gap:13px}body.cabinet #project-grid .brief{line-height:1.35}body.cabinet #project-grid .project-signals{align-items:flex-start}body.playful.cabinet dialog{width:calc(100% - 20px);max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);border-radius:14px}.dialog-toolbar,.dialog-footer{padding:10px 12px}.dialog-content{padding:20px 18px}.dialog-dismiss-hint{max-width:140px;font-size:13px}body.cabinet dialog .detail-heading{flex-wrap:wrap;gap:14px}body.cabinet dialog .detail-heading h2{font-size:25px;overflow-wrap:anywhere}body.cabinet dialog .detail-summary{font-size:20px}body.cabinet dialog .detail-actions{align-items:stretch}body.cabinet dialog .detail-actions :is(button,a){flex:1 1 140px;justify-content:center;text-align:center;margin:0}}@media(max-width:360px){body.cabinet #project-grid .card-heading{grid-template-columns:80px minmax(0,1fr);gap:11px}body.cabinet #project-grid h3{font-size:18px}body.cabinet h1{font-size:34px}}.soft-tap-check{display:grid;gap:16px;max-width:500px;margin:12px auto 28px;padding:20px;border:2px solid var(--accent-deep);border-radius:18px;background:#fff;color:var(--ink);font:16px/1.4 Plex,sans-serif}.soft-tap-check output{display:block;min-height:3em;font-size:14px;overflow-wrap:anywhere}body.playful .soft-tap-check #soft-tap-test{min-height:64px;border-radius:20px;color:var(--ink);background:linear-gradient(#fff,#d9eee6);box-shadow:inset 0 2px #fff,0 calc(4px - var(--soft-sink,0px)) 0 #adcdbf,0 8px 15px #123b2b16}body :is(button,.cv-link,.explore-link,summary,[data-foam-option]){touch-action:manipulation;-webkit-tap-highlight-color:transparent}body [data-marshmallow]{position:relative!important;isolation:isolate;overflow:visible!important;background:transparent!important;border-color:transparent!important;box-shadow:none!important;transform:none!important;filter:var(--foam-warp)!important}body [data-marshmallow]:after{display:none!important}.marshmallow-surface{position:absolute!important;left:-1px;top:-1px;width:calc(100% + 2px)!important;height:calc(100% + 2px)!important;overflow:visible;z-index:-1;pointer-events:none;max-width:none!important;max-height:none!important}.marshmallow-defs{position:absolute;left:0;top:0;pointer-events:none;overflow:visible}.marshmallow-side{fill:var(--soft-edge,color-mix(in srgb,var(--foam-rest-face,#aac9be) 82%,#062b30));stroke:var(--soft-edge,color-mix(in srgb,var(--foam-rest-face,#aac9be) 82%,#062b30));stroke-width:1}.marshmallow-face{fill:var(--soft-face,var(--foam-rest-face,#e8f3ee));stroke:color-mix(in srgb,var(--soft-edge,var(--foam-rest-face,#aac9be)) 70%,white);stroke-width:1}body :is(button,.cv-link,.explore-link)[aria-pressed=true],body :is(.cv-link,.dialog-done),body button[aria-expanded=true]{--soft-face:var(--accent-deep,#15584f)}body [data-soft]{transition:none!important}body.playful.cabinet :is(#projects,.topbar,dialog) :is(button,.cv-link,.explore-link):where(:not(.project-card):not(.stat-cell):not(.metrics-help):not([data-theme-set])){--soft-edge:color-mix(in srgb,var(--accent-deep) 24%,#dbe7e1);--soft-face:color-mix(in srgb,var(--accent) 8%,#f0f6f3);min-height:44px;border:1px solid color-mix(in srgb,var(--accent-deep) 20%,#e1eae5);border-radius:16px;background:linear-gradient(165deg,#fff 8%,color-mix(in srgb,var(--accent) 9%,#f1f6f3));color:var(--ink);box-shadow:inset 0 2px 1px #ffffffd9,0 calc(3px - var(--soft-sink,0px)) 0 var(--soft-edge),0 5px 9px #153d3110;transition:background-color .16s,border-color .16s,box-shadow .16s}body.playful.cabinet :is(#projects,.topbar,dialog) :is(button[aria-pressed=true],button[aria-expanded=true],.cv-link,.dialog-done):where(:not(.project-card):not(.stat-cell):not([data-theme-set])){--soft-edge:color-mix(in srgb,var(--accent-deep) 78%,#061e1b);--soft-face:var(--accent-deep);background:linear-gradient(160deg,color-mix(in srgb,var(--accent-deep) 85%,#fff),var(--accent-deep));color:#fff;border-color:var(--accent-deep);box-shadow:inset 0 2px 1px #ffffff40,inset 0 0 0 1px #ffffff18,0 calc(3px - var(--soft-sink,0px)) 0 var(--soft-edge),0 5px 10px #12382b1c}body.playful.cabinet :is(#projects,dialog) button[aria-pressed=true] :is(b,span){color:inherit}body.playful.cabinet :is(#projects,dialog) button[aria-pressed=true] b{opacity:1;background:#ffffff1c;border-radius:6px}body.playful.cabinet :is(#projects,.topbar,dialog) :is(button,.cv-link,.explore-link):focus-visible{outline:3px solid color-mix(in srgb,var(--accent) 75%,#fff);outline-offset:5px}@media(hover:hover){body.playful.cabinet :is(#projects,.topbar,dialog) button:where(:not(.project-card):not(.stat-cell):not(.metrics-help):not([data-theme-set])):hover{border-color:var(--accent-deep)}}body.cv-page :is(.button,.portfolio-note a,.contact-link){position:relative;border-radius:14px;touch-action:manipulation;box-shadow:inset 0 2px #fff6,0 3px #103d3930,0 5px 9px #103d3912}body.cv-page .button{--soft-face:var(--accent-deep,#15584f);--soft-edge:color-mix(in srgb,var(--soft-face) 80%,#061e1b);min-height:44px;background-color:var(--soft-face);color:#fff;border-color:var(--soft-edge)}body.cv-page .button:is(:hover,:active){--soft-face:color-mix(in srgb,var(--accent-deep,#15584f) 88%,#061e1b);background-color:var(--soft-face);color:#fff}body.cv-page .button:focus-visible{outline:3px solid var(--accent-deep,#15584f);outline-offset:4px}body.cv-page :is(.portfolio-note a,.contact-link){--soft-face:#edf4ef;--soft-edge:#b9cec1;color:var(--accent-deep,#15584f)}.cv-motion{display:inline-flex;align-items:center;font:14px/1.2 Plex,sans-serif}.cv-motion select{font:inherit;color:var(--ink);border:1px solid #b9d4c7;border-radius:12px;background:#f3faf6;min-height:44px;padding:8px;max-width:145px}@media(max-width:650px){body.cabinet .top-preferences{grid-column:1/-1;grid-row:2;justify-content:space-between;gap:8px}body.cabinet .motion-control{display:flex}body.cabinet .motion-control select{font-size:16px;min-width:140px;min-height:44px}body.cabinet .topbar>.cv-link{grid-column:2;grid-row:1;width:auto;min-width:88px;padding:10px}body.cv-page .header{flex-wrap:wrap}}@media print{.cv-motion{display:none}}@media(pointer:coarse),(max-width:650px){body.playful.cabinet :is(#kind-filters .facet-button,.theme-swatches button,.shader-controls button,.metrics-help,.close){min-height:44px;min-width:44px}body.playful.cabinet .theme-swatches button{width:44px}body.cabinet .top-preferences{flex-wrap:wrap;row-gap:8px}body.cabinet .motion-control>span{display:none}body.cabinet .motion-control select{width:140px;min-width:140px;padding:10px 25px 10px 10px}body.cabinet #pause-shader{right:0}body.cabinet #reset-shader{right:50px}}html{scrollbar-gutter:stable}.cv-page .cv-selected-work{margin-top:20px;padding-top:17px;border-top:1px dotted #91afa2;break-inside:avoid}.cv-page .cv-selected-work h2{font-size:20px}.cv-page .cv-work-intro{font-size:14px;line-height:1.35;color:#52675e;margin:0 0 9px}.cv-page .cv-selected-work ul{padding-left:17px;margin:0;font:15px/1.4 Plex,sans-serif}.cv-page .cv-selected-work li{margin:5px 0;padding-left:2px}.cv-page .cv-selected-work strong{color:#15584f}.cv-page .portfolio-note{flex-wrap:wrap;gap:6px 20px}@media print{.cv-page .cv-selected-work{margin-top:10px;padding-top:10px}.cv-page .cv-selected-work h2{font-size:14px}.cv-page .cv-selected-work ul,.cv-page .cv-work-intro{font-size:10px;line-height:1.3}.cv-page .cv-selected-work li{margin:3px 0}}body.cv-page{--ink: #202c29;--muted: #4a5d56;background:#f3f5f3;color:var(--ink);font:16px/1.55 Arial,Helvetica,sans-serif}body.cv-page main{max-width:900px;margin:32px auto;border:0;border-radius:0;background:transparent;box-shadow:none}body.cv-page .resume{max-width:none;padding:40px 48px;border:1px solid #d7dfda;border-radius:4px;background:#fff;box-shadow:none}body.cv-page .resume-top{align-items:flex-start;gap:24px}body.cv-page .resume-top>div{min-width:0}body.cv-page .resume .eyebrow{font:13px/1.4 Arial,Helvetica,sans-serif;color:#4a5d56;letter-spacing:.025em}body.cv-page .resume h1{margin:6px 0 10px;color:#202c29;font:600 42px/1.12 Georgia,Times New Roman,serif;letter-spacing:-.025em}body.cv-page .resume .lead{max-width:32em;color:#374b43;font:17px/1.45 Arial,Helvetica,sans-serif}body.cv-page .resume-summary{max-width:none;margin:24px 0 12px;color:#202c29;font:inherit}body.cv-page .resume-contact{font:14px/1.6 Arial,Helvetica,sans-serif}body.cv-page .resume a{color:#17594f;text-decoration:underline}body.cv-page .resume a:hover{color:#103f38;text-decoration-thickness:2px}body.cv-page :is(a,button,select):focus-visible{outline:3px solid #17594f;outline-offset:4px}body.cv-page .button{--soft-face: #17594f;flex-shrink:0;min-height:44px;margin:0;padding:10px 14px;border:1px solid #17594f;border-radius:6px;background:#17594f;color:#fff;font:14px/1.4 Arial,Helvetica,sans-serif;white-space:nowrap;box-shadow:none}body.cv-page .button:is(:hover,:active){--soft-face: #103f38;background:#103f38;border-color:#103f38;color:#fff}body.cv-page .portfolio-note{display:flex;flex-wrap:wrap;gap:6px 18px;margin:20px 0 0;padding:12px 0;border:0;border-block:1px solid #d7dfda;background:transparent;color:#4a5d56;font:13px/1.5 Arial,Helvetica,sans-serif}body.cv-page .resume-layout{display:block;columns:auto;margin-top:28px}body.cv-page .resume-layout>section+section{margin-top:28px;padding-top:0;border-top:0}body.cv-page .resume h2{margin:0 0 16px;padding-bottom:8px;border-bottom:1px solid #d7dfda;color:#17594f;font:600 22px/1.25 Georgia,Times New Roman,serif;letter-spacing:0;break-after:avoid}body.cv-page .job{padding:0;margin:0 0 22px;border:0}body.cv-page .job:last-child{margin-bottom:0}body.cv-page .job>.eyebrow{position:static;width:auto;margin:0 0 3px;color:#4a5d56;font-size:13px}body.cv-page .job h3{margin:0 0 3px;color:#202c29;font:700 18px/1.3 Arial,Helvetica,sans-serif;letter-spacing:0}body.cv-page .job .job-role{margin:0 0 7px;color:#374b43;font:15px/1.4 Arial,Helvetica,sans-serif}body.cv-page .resume-layout ul{margin:0;padding-left:1.2em;columns:auto;font:inherit}body.cv-page .resume-layout li{margin:5px 0;padding:0}body.cv-page .resume-layout strong{color:#202c29}body.cv-page .cv-education p{font:inherit}@media screen and (max-width:940px){body.cv-page main{margin:20px 16px}body.cv-page .header{flex-wrap:wrap;gap:16px;padding:18px 24px}body.cv-page .header nav{flex-wrap:wrap;gap:16px}}@media screen and (max-width:640px){body.cv-page main{margin:12px 8px}body.cv-page .resume{padding:26px 20px}body.cv-page .resume-top{display:block}body.cv-page .resume h1{font-size:36px}body.cv-page .resume-top>.button{margin-top:18px}body.cv-page .header{padding:16px}body.cv-page .header nav{justify-content:flex-start;font-size:14px}body.cv-page .resume-contact{overflow-wrap:anywhere}}@media print{@page{size:auto;margin:14mm 16mm}body.cv-page{background:#fff;color:#202020;font:10.5pt/1.35 Arial,Helvetica,sans-serif}body.cv-page :is(.header,footer,.skip,#print-resume,.portfolio-note,.cv-motion){display:none!important}body.cv-page main,body.cv-page .resume{width:auto;max-width:none;margin:0;padding:0;border:0;border-radius:0;background:#fff;box-shadow:none}body.cv-page .resume-top{display:block}body.cv-page .resume-top .eyebrow{display:none}body.cv-page .resume h1{margin:0 0 5pt;font-size:25pt}body.cv-page .resume .lead{max-width:none;font-size:11pt}body.cv-page .resume-summary{margin:10pt 0 6pt;font:inherit}body.cv-page .resume-contact{font-size:10pt}body.cv-page .resume-layout{display:block;columns:auto;margin-top:14pt}body.cv-page .resume-layout>section+section{margin-top:15pt}body.cv-page .resume h2{margin-bottom:9pt;padding-bottom:4pt;font-size:13pt}body.cv-page .job{margin-bottom:12pt;break-inside:avoid}body.cv-page .job>.eyebrow{position:static;font-size:9.5pt}body.cv-page .job h3{font-size:11pt}body.cv-page .job .job-role{margin-bottom:4pt;font-size:10pt}body.cv-page .resume-layout ul{font:inherit}body.cv-page .resume-layout li{margin:3pt 0;orphans:2;widows:2}body.cv-page :is(.cv-selected-work,.cv-skills,.cv-education){break-inside:avoid}body.cv-page .resume :is(h1,h2,h3,p,a,strong){color:#202020}}
