:root{--sx-g00: #000000;--sx-g01: #151515;--sx-g02: #222222;--sx-g03: #303030;--sx-g04: #3F3F3F;--sx-g05: #4E4E4E;--sx-g06: #5E5E5E;--sx-g07: #6F6F6F;--sx-g08: #7F7F7F;--sx-g09: #919191;--sx-g10: #A2A2A2;--sx-g11: #B4B4B4;--sx-g12: #C6C6C6;--sx-g13: #D9D9D9;--sx-g14: #ECECEC;--sx-g15: #FFFFFF;--sx-basalt: var(--sx-g01);--sx-surface-dark: var(--sx-g02);--sx-hairline-dark: var(--sx-g05);--sx-muted-text: var(--sx-g08);--sx-hairline-light: var(--sx-g11);--sx-surface-light: var(--sx-g13);--sx-bone: var(--sx-g14);--sx-ink: var(--sx-g00);--sx-paper: var(--sx-g15)}:root{--m: 8px}@font-face{font-family:IBM Plex Mono;src:url(/fonts/IBMPlexMono-Regular.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/IBMPlexMono-Medium.woff2) format("woff2");font-weight:500;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/fonts/IBMPlexMono-SemiBold.woff2) format("woff2");font-weight:600;font-display:swap}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{background:var(--sx-g01);color-scheme:dark}body{background:var(--sx-g01);color:var(--sx-g14);font-family:IBM Plex Mono,ui-monospace,monospace;font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit}:focus-visible{outline:1px solid var(--sx-g13);outline-offset:3px}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}html.hero-locked,html.hero-locked body{overflow:hidden;overscroll-behavior:none}.hero{position:relative;z-index:2;height:100vh;height:100svh;overflow:hidden;background:var(--sx-g01);touch-action:pan-y}.hero canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block}.hero-overlay{pointer-events:none}.hero.no-webgl .hero-gl{display:none}.hud{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--sx-g08)}.hud .corner{position:absolute;width:calc(var(--m) * 4);height:calc(var(--m) * 4);border:0 solid var(--sx-g05)}.hud .tl{top:24px;left:24px;border-top-width:1px;border-left-width:1px}.hud .tr{top:24px;right:24px;border-top-width:1px;border-right-width:1px}.hud .bl{bottom:24px;left:24px;border-bottom-width:1px;border-left-width:1px}.hud .br{bottom:24px;right:24px;border-bottom-width:1px;border-right-width:1px}.hud .lbl{position:absolute;white-space:pre}.hud .tl-t{top:30px;left:72px}.hud .tr-t{top:30px;right:72px;text-align:right}.hud .bl-t{bottom:30px;left:72px}.hud b{color:var(--sx-g13);font-weight:500}.skip{position:absolute;left:50%;bottom:28px;transform:translate(-50%);background:none;border:0;cursor:pointer;font:500 10px/1 IBM Plex Mono,monospace;letter-spacing:.14em;color:var(--sx-g08);padding:var(--m)}.skip:hover{color:var(--sx-g13)}.stage-marker{position:absolute;top:50%;right:34px;transform:translateY(-50%);display:grid;justify-items:center;pointer-events:none}.stage-marker i{width:8px;height:8px;border:1px solid var(--sx-g07);will-change:transform}.stage-marker i[data-state=near]{border-color:var(--sx-g13)}.stage-marker i[data-state=current]{border-color:var(--sx-g13);background:var(--sx-g14)}.stage-marker i[data-state=done]{border-color:var(--sx-g13);background:var(--sx-g11)}.stage-marker b{position:relative;width:1px;height:32px;margin:6px 0;background:var(--sx-g03);overflow:hidden}.stage-marker b span{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--sx-g11);transform-origin:top;transform:scaleY(0)}@media (max-width: 640px){.hud .tr-t{display:none}.stage-marker{right:20px}.stage-marker b{height:22px}.skip{left:auto;right:16px;top:22px;bottom:auto;transform:none}.hud .bl-t{left:64px;font-size:9px;letter-spacing:.04em}}.site-nav{position:fixed;inset:0 0 auto 0;height:56px;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:0 24px;background:color-mix(in srgb,var(--sx-g01) 88%,transparent);border-bottom:1px solid var(--sx-g03);opacity:0;transform:translateY(-8px);pointer-events:none;transition:opacity .5s,transform .5s}.site-nav.on{opacity:1;transform:none;pointer-events:auto}.site-nav a{text-decoration:none}.nav-home{display:flex;align-items:center;gap:16px}.nav-slot{width:22px;height:22px}.nav-slot svg{display:block;width:100%;height:100%;fill:var(--sx-g14)}.nav-name{font-size:12px;font-weight:600;letter-spacing:.3em;color:var(--sx-g14)}.site-nav ul{list-style:none;display:flex;gap:24px}.site-nav li a{display:inline-flex;align-items:center;gap:10px;font-size:11px;letter-spacing:.12em;color:var(--sx-g08)}.site-nav li a i{width:6px;height:6px;background:var(--sx-g07);transition:transform .3s,background .3s}.site-nav li a:hover,.site-nav li a[aria-current]{color:var(--sx-g14)}.site-nav li a[aria-current] i{transform:rotate(45deg) scale(1.25);background:var(--sx-g14)}@media (max-width: 640px){.nav-name{display:none}.site-nav ul{gap:14px}.site-nav li a{font-size:10px;letter-spacing:.08em}}.hero .hud,.hero .stage-marker{transition:opacity .25s ease-out}.hero.done .hud,.hero.done .stage-marker{opacity:0}.page-dust{position:fixed;top:0;right:0;bottom:0;left:0;width:100vw;height:100vh;z-index:0;pointer-events:none}#app{position:relative;z-index:1}#app section{max-width:1120px;margin:0 auto;padding:calc(var(--m) * 16) calc(var(--m) * 3) calc(var(--m) * 6);scroll-margin-top:56px}[data-reveal]{opacity:0;transform:translateY(var(--m));transition:opacity .6s ease-out,transform .6s ease-out}[data-reveal].in{opacity:1;transform:none}.sx-head{position:relative;display:flex;align-items:baseline;justify-content:space-between;padding:calc(var(--m) * 2) calc(var(--m) * 2) calc(var(--m) * 1.5);border-bottom:1px solid var(--sx-g05);margin-bottom:calc(var(--m) * 4)}.sx-head .br{position:absolute;top:0;width:var(--m);height:var(--m);border:0 solid var(--sx-g07)}.sx-head .tl{left:0;border-top-width:1px;border-left-width:1px}.sx-head .tr{right:0;border-top-width:1px;border-right-width:1px}.sx-head h2{font-size:13px;font-weight:600;letter-spacing:.24em;color:var(--sx-g14)}.sx-head .num{color:var(--sx-g08);font-weight:500}.sx-head .aside{font-size:10px;letter-spacing:.14em;color:var(--sx-g08)}.bullet{display:inline-block;flex:none;width:6px;height:6px;background:var(--sx-g07);transition:transform .3s,background .3s}em{font-style:normal;font-size:10px;letter-spacing:.08em;color:var(--sx-g09);border:1px solid var(--sx-g03);padding:2px var(--m)}.resume-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:calc(var(--m) * 8)}.k{font-size:10px;font-weight:500;letter-spacing:.18em;color:var(--sx-g08);margin:0 0 calc(var(--m) * 2)}.resume-side .k:not(:first-child){margin-top:calc(var(--m) * 5)}.roles{list-style:none;border-left:1px solid var(--sx-g03)}.roles>li{position:relative;padding:0 0 calc(var(--m) * 4) calc(var(--m) * 3)}.roles>li>.bullet{position:absolute;left:-3.5px;top:7px}.roles>li:first-child>.bullet{transform:rotate(45deg) scale(1.3);background:var(--sx-g14)}.when{font-size:10px;letter-spacing:.14em;color:var(--sx-g08)}.roles h4{font-size:14px;font-weight:600;color:var(--sx-g14);margin:2px 0 var(--m)}.roles h4 span{font-weight:400;color:var(--sx-g09)}.roles ul{list-style:none}.roles ul li{font-size:13px;color:var(--sx-g11);padding-left:calc(var(--m) * 2);position:relative}.roles ul li:before{content:"";position:absolute;left:0;top:.7em;width:4px;height:4px;background:var(--sx-g05)}.skill-group{margin-bottom:calc(var(--m) * 2)}.skill-group .g{font-size:11px;color:var(--sx-g11);margin-bottom:4px}.skill-group .tags{display:flex;flex-wrap:wrap;gap:var(--m)}.edu{font-size:13px;color:var(--sx-g11)}.edu b{color:var(--sx-g14);font-weight:600}.pdf{display:inline-block;margin-top:calc(var(--m) * 4);font-size:11px;letter-spacing:.14em;text-decoration:none;color:var(--sx-g14);border:1px solid var(--sx-g05);padding:var(--m) calc(var(--m) * 2)}.pdf:hover{border-color:var(--sx-g13)}.contact-line{font-size:14px;color:var(--sx-g11);margin-bottom:calc(var(--m) * 3)}.contact-links{list-style:none;display:flex;flex-wrap:wrap;gap:calc(var(--m) * 4)}.contact-links a{display:inline-flex;align-items:center;gap:12px;font-size:12px;letter-spacing:.14em;text-decoration:none;color:var(--sx-g14)}.contact-links a:hover .bullet,.contact-links a:focus-visible .bullet{transform:rotate(45deg) scale(1.3);background:var(--sx-g14)}.site-foot{display:flex;justify-content:space-between;gap:var(--m);margin-top:calc(var(--m) * 12);padding-top:calc(var(--m) * 2);border-top:1px solid var(--sx-g03);font-size:10px;letter-spacing:.14em;color:var(--sx-g08)}@media (max-width: 900px){.resume-grid{grid-template-columns:1fr;gap:calc(var(--m) * 5)}}@media (max-width: 640px){#app section{padding-top:calc(var(--m) * 11)}.site-foot{flex-direction:column}}
