@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/_astro/martian-mono-cyrillic-ext-standard-normal.BFx_pHPN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/_astro/martian-mono-cyrillic-standard-normal.Dgr-UBxV.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/_astro/martian-mono-latin-ext-standard-normal.DeTdBbNh.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Martian Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;font-stretch:75% 112.5%;src:url(/_astro/martian-mono-latin-standard-normal.1TqSgyfh.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:dark;--void:#050906;--phosphor:#7fe0a3;--glow:127 224 163;--grade:#c3cfbe;--dim:#7a9682;--visited:#5fb882;--trace:#1c3527;--groove:#2a4a37;--amber:#e0b872;--rabbit:#eef0e6;--serif:Georgia, "Times New Roman", serif;--terminal:"Martian Mono Variable", "Courier New", monospace;--frame-width:15rem;font-family:var(--serif);font-synthesis:none;scroll-behavior:smooth}*,:before,:after{box-sizing:border-box}html{background:var(--void)}body{min-width:20rem;color:var(--grade);margin:0;font-size:1.0625rem;line-height:1.7;overflow-x:clip}::selection{background:var(--phosphor);color:var(--void)}h1,h2,h3,h4,p{margin-top:0}p,li,dd{text-wrap:pretty}h1,h2,h3,h4{text-wrap:balance}a{color:var(--phosphor);text-underline-offset:.2em;text-decoration-thickness:1px}a:visited{color:var(--visited)}a:hover{color:var(--rabbit)}:focus-visible{outline:2px solid var(--phosphor);outline-offset:3px}svg{flex:none}hr{border:0;border-top:1px solid var(--trace);height:0;box-shadow:0 1px 0 var(--groove);border-bottom:1px solid #030805;margin:5rem 0 4.5rem}.backdrop{z-index:-1;pointer-events:none;height:75vh;position:fixed;inset:0 0 auto}.rain,.rain-heads{width:100%;height:100%;opacity:var(--rain-opacity,.22);display:block;position:absolute;inset:0}.backdrop:after{content:"";background:repeating-linear-gradient(#0000 0 2px,#05090680 2px 3px);position:absolute;inset:0}.trail{--col:1.5rem;flex:1;min-height:14rem;margin-left:-.15rem;position:relative}.trail:before,.trail-fill{top:0;left:calc(var(--col) / 2 - .5px);content:"";position:absolute}.trail:before{border-left:1px dotted var(--groove);bottom:0}.trail-fill{width:1px;height:calc(var(--progress,0) * (100% - var(--col)));background:var(--phosphor);opacity:.8;box-shadow:0 0 4px rgb(var(--glow) / .5)}.stations{position:absolute;inset:0}.station{top:calc(var(--at) * (100% - var(--col)));height:var(--col);color:var(--grade);align-items:center;gap:.6rem;text-decoration:none;display:flex;position:absolute;left:0}.station:first-child{--at:0}.station:nth-child(2){--at:.25}.station:nth-child(3){--at:.5}.station:nth-child(4){--at:.75}.station:nth-child(5){--at:1}.station:visited{color:var(--grade)}.station-node{width:var(--col);height:var(--col);background:var(--void);place-items:center;display:grid}.station-node svg{width:1.1rem;height:1.1rem;color:var(--dim)}.station:hover,.station:hover svg,.station[aria-current],.station[aria-current] svg{color:var(--phosphor)}.trail-rabbit{z-index:1;top:calc(var(--progress,0) * (100% - var(--col)));width:var(--col);height:var(--col);color:var(--rabbit);filter:drop-shadow(0 0 3px var(--void)) drop-shadow(0 0 6px rgb(var(--glow) / .35));pointer-events:none;background:var(--void);position:absolute;left:0}.trail.hopping .trail-rabbit{animation:.34s ease-in-out infinite hop}@keyframes hop{0%,to{translate:0;scale:1}15%{scale:1.08 .92}50%{translate:0 -.35rem;scale:.95 1.05}}.skip-link{z-index:10;background:var(--phosphor);color:var(--void);font-family:var(--terminal);padding:.3rem .7rem;font-size:.85rem;position:fixed;top:1rem;left:1rem;transform:translateY(-300%)}.skip-link:focus{transform:none}.frameset{grid-template-columns:var(--frame-width) minmax(0, 1fr);display:grid}.frame{border-right:1px solid var(--trace);background:var(--void);height:100svh;font-family:var(--terminal);flex-direction:column;gap:2.5rem;padding:2.5rem 1.75rem 2.5rem 2.75rem;font-size:.85rem;font-weight:350;line-height:1.3;display:flex;position:sticky;top:0}.mark{width:3rem;display:block}.mark img{width:100%;height:auto;display:block}.nav-compact{display:none}.nav-compact a,.nav-compact a:visited,.socials a,.socials a:visited{color:var(--grade);align-items:center;gap:.5rem;text-decoration:none;display:inline-flex}.nav-compact svg{width:1.1rem;height:1.1rem;color:var(--dim)}.nav-compact a:hover,.nav-compact a:hover svg,.socials a:hover{color:var(--phosphor)}.frame-foot{flex:none}.socials{gap:1rem;margin-bottom:1.25rem;display:flex}.socials svg{width:1.35rem;height:1.35rem}.frame-note{color:var(--dim);margin:0;font-size:.72rem;line-height:1.6}main{min-width:0;max-width:76rem;padding:0 clamp(1.5rem,5vw,4.5rem) 3rem}section{scroll-margin-top:2rem}.hero{align-items:center;min-height:min(100svh,60rem);padding:6rem 0 4rem;display:flex;position:relative}.hero-text{max-width:44rem}.hero .role{margin-bottom:1rem;font-size:.9rem}.hero h1{letter-spacing:-.05em;margin:0 0 1.75rem -.04em;font-size:clamp(2.6rem,6vw,4.5rem);line-height:1.05}@keyframes blink{50%{opacity:0}}h1{color:var(--rabbit);font-family:var(--terminal);letter-spacing:-.06em;text-shadow:0 0 .35em rgb(var(--glow) / .22);margin:0 0 1.25rem -.05em;font-size:clamp(2.6rem,7.5vw,5.75rem);font-weight:200;font-stretch:87.5%;line-height:1}.role{color:var(--phosphor);font-family:var(--terminal);margin-bottom:2rem;font-size:clamp(.95rem,2vw,1.1rem);font-weight:350;line-height:1.4}.hero h1:after{vertical-align:0;opacity:.85;background:var(--phosphor);content:"";width:.3em;height:.7em;margin-left:.15em;animation:1.8s step-end infinite blink;display:inline-block}.intro{max-width:36em;margin-bottom:0;font-size:1.1rem}.intro+.links{margin-top:2.25rem}.links{font-family:var(--terminal);flex-wrap:wrap;gap:.25rem 1.5rem;margin:0;font-size:.875rem;font-weight:350;line-height:1.6;display:flex}.links a{align-items:center;gap:.5em;text-decoration:none;display:inline-flex}.links svg{width:1.3em;height:1.3em}.links a:hover{text-decoration:underline}h2{color:var(--phosphor);font-family:var(--terminal);letter-spacing:-.04em;align-items:center;gap:.45em;margin-bottom:1rem;font-size:clamp(1.75rem,4vw,2.4rem);font-weight:250;font-stretch:87.5%;line-height:1.1;display:flex}h2 svg{width:.8em;height:.8em}.lede{max-width:34em;color:var(--dim);margin-bottom:3rem;font-style:italic}.project{max-width:38em}.project+.project{margin-top:3rem}.showcase{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:center;gap:2rem clamp(2rem,4vw,3.5rem);max-width:none;display:grid}.showcase:nth-of-type(2n){grid-template-columns:minmax(0,1fr) minmax(0,1.15fr)}.showcase:nth-of-type(2n) .screen{order:2}.showcase>div{max-width:34em}.showcase+.showcase{margin-top:5rem}.screen{aspect-ratio:16/10;border:1px solid var(--groove);background:var(--void);box-shadow:0 0 0 4px #09110c, 0 0 0 5px var(--trace), 0 0 2.5rem rgb(var(--glow) / .08);border-radius:6px;display:block;position:relative;overflow:hidden}.screen img{object-fit:cover;object-position:top left;filter:grayscale()sepia()hue-rotate(80deg)saturate(1.4)brightness(.72)contrast(1.1);width:100%;height:100%;transition:filter .5s;display:block}.screen.light img{filter:invert(.92)grayscale()sepia()hue-rotate(80deg)saturate(1.4)brightness(.8)contrast(1.1)}.screen:after{border-radius:inherit;content:"";background:repeating-linear-gradient(#0000 0 2px,#05090673 2px 3px);transition:opacity .5s;position:absolute;inset:0;box-shadow:inset 0 0 2.5rem #000000b3}.showcase:is(:hover,:focus-within) .screen img{filter:none}.showcase:is(:hover,:focus-within) .screen:after{opacity:.35}.project :is(h3,h4){color:var(--rabbit);margin-bottom:.5rem;font-size:1.4rem;font-weight:400;line-height:1.25}.project p{margin-bottom:.75rem}.project :is(h3,h4) a{color:var(--rabbit);align-items:center;gap:.4em;display:inline-flex}.project :is(h3,h4) a svg{width:.7em;height:.7em;color:var(--phosphor)}.stack{color:var(--dim);font-family:var(--terminal);font-size:.75rem;font-weight:350;line-height:1.6}.more{margin-top:3rem}.timeline{margin:2rem 0 0;padding:0;list-style:none}.tenure{margin:2rem 0 3rem}.tenure svg{display:block;overflow:visible}.tenure-axis{stroke:var(--groove);stroke-dasharray:1 3}.tenure-bar{fill:var(--groove);stroke:var(--void);stroke-width:3px}.tenure-bar:nth-of-type(odd){fill:var(--trace)}.tenure-bar.current{fill:#4a3e26}.tenure-tick{stroke:var(--groove)}.tenure-label,.tenure-year{fill:var(--dim);font-family:var(--terminal);font-size:11px;font-weight:350}.tenure-label{fill:var(--grade)}.tenure-label.current,.tenure-bar.current+.tenure-label{fill:var(--amber)}.position.current .dates{color:var(--amber)}.position{grid-template-columns:10rem minmax(0,38em);gap:2rem;display:grid}.position+.position{margin-top:2.75rem}.dates{color:var(--dim);font-family:var(--terminal);margin:.3rem 0 0;font-size:.75rem;font-weight:350;line-height:1.6}.position :is(h3,h4){color:var(--rabbit);margin-bottom:.1rem;font-size:1.2rem;font-weight:400;line-height:1.35}.company{color:var(--grade)}.place{color:var(--dim);margin-bottom:.6rem;font-style:italic}.position ul{margin:0;padding-left:1.1rem;list-style:square}.position li::marker{color:var(--phosphor)}.position li+li{margin-top:.4rem}.facts{grid-template-columns:10rem minmax(0,38em);gap:1rem 2rem;margin:3.5rem 0 0;display:grid}.facts dt{color:var(--dim);font-family:var(--terminal);align-self:start;align-items:center;gap:.6em;font-size:.75rem;font-weight:350;line-height:2.2;display:flex}.facts dt svg{width:1.2rem;height:1.2rem}.facts dd{overflow-wrap:anywhere;min-width:0;margin:0}#contact .facts{margin-top:0}.split{grid-template-columns:minmax(0,1fr) 17rem;align-items:start;gap:2.5rem clamp(2.5rem,5vw,4.5rem);display:grid}.split>:first-child{min-width:0}.split>.timeline{margin-top:0}.side{border-left:1px solid var(--trace);padding-left:2rem;position:sticky;top:2rem}.facts.stacked{grid-template-columns:1fr;gap:.2rem;margin:0}.facts.stacked dd+dt{margin-top:1.25rem}.side .more{margin-top:2rem}.email{flex-wrap:wrap;align-items:center;gap:.75rem 1.5rem;margin-bottom:3rem;display:flex}.email-address,.email-address:visited{color:var(--rabbit);font-family:var(--terminal);letter-spacing:-.03em;overflow-wrap:anywhere;text-decoration-color:var(--groove);text-underline-offset:.25em;font-size:clamp(1.15rem,4.2vw,2.4rem);font-weight:200;font-stretch:87.5%;line-height:1.2;text-decoration-thickness:1px}.email-address:hover{color:var(--phosphor);text-decoration-color:currentColor}.copy{border:1px solid var(--groove);color:var(--phosphor);cursor:pointer;font:350 .8rem/1.2 var(--terminal);background:0 0;border-radius:3px;align-items:center;gap:.45rem;padding:.4rem .8rem;display:inline-flex}.copy[hidden]{display:none}.copy:hover{border-color:var(--phosphor)}.copy svg{width:1.1em;height:1.1em}.copy .copy-done,.copy.copied .copy-idle{display:none}.copy.copied .copy-done{display:block}.copy.copied{border-color:var(--phosphor)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}footer{border-top:1px solid var(--trace);color:var(--dim);font-family:var(--terminal);flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem;margin-top:6rem;padding-top:1.25rem;font-size:.75rem;font-weight:350;display:flex}footer p{margin:0}.doc{border:1px solid var(--groove);max-width:54rem;box-shadow:0 0 0 4px #09110c, 0 0 0 5px var(--trace), 0 0 2.5rem rgb(var(--glow) / .06);background:#08110c;border-radius:6px}.doc-bar{border-bottom:1px solid var(--trace);color:var(--dim);font:350 .75rem/1.4 var(--terminal);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem 1.5rem;padding:.6rem 1.1rem;display:flex}.doc-bar span,.doc-bar a{align-items:center;gap:.5em;display:inline-flex}.doc-bar a{text-decoration:none}.doc-bar a:hover{text-decoration:underline}.doc-bar svg{width:1.3em;height:1.3em}.doc-page{padding:clamp(1.5rem,4vw,2.75rem)}.doc-name{color:var(--rabbit);font-family:var(--terminal);letter-spacing:-.04em;margin-bottom:.25rem;font-size:clamp(1.5rem,3vw,2rem);font-weight:250;font-stretch:87.5%;line-height:1.1}.doc-meta{color:var(--phosphor);font:350 .85rem/1.4 var(--terminal);margin-bottom:1.5rem}.resume{border-top:1px dotted var(--groove);margin-top:2rem;padding-top:1.5rem}.resume summary{color:var(--phosphor);cursor:pointer;font-family:var(--terminal);gap:.6em;font-size:.875rem;font-weight:350;list-style:none;display:inline-flex}.resume summary::-webkit-details-marker{display:none}.resume summary:before{content:"[+]"}.resume[open] summary:before{content:"[-]"}.resume summary:hover{color:var(--rabbit)}.when-open,.resume[open] .when-closed{display:none}.resume[open] .when-open{display:inline}.resume-body{margin-top:3rem}.resume-body h3{color:var(--phosphor);font-family:var(--terminal);align-items:center;gap:.5em;margin:3.5rem 0 1.5rem;font-size:1.3rem;font-weight:300;font-stretch:87.5%;line-height:1.2;display:flex}.resume-body h3:first-child{margin-top:0}.resume-body h3 svg{width:1em;height:1em}.resume-body .timeline{margin-top:0}.summary{max-width:38em}.skills{margin-top:0}.skills dt{padding-top:.25rem;line-height:1.6}.error-shell{place-items:center;min-height:100svh;padding:1.5rem;display:grid}.error-shell main{width:min(100%,40rem);padding:0}.error-shell h1{margin-bottom:1.5rem;font-size:clamp(2.25rem,7vw,3.75rem)}.error-shell .intro{margin-bottom:1.5rem}@media (width<=52rem){.frameset{grid-template-columns:1fr}.frame{border-right:0;border-bottom:1px solid var(--trace);flex-flow:wrap;align-items:center;gap:.5rem 1.5rem;height:auto;padding:1rem;position:static}.mark{width:2.25rem}.nav-compact{flex-flow:wrap;gap:.25rem 1.1rem;display:flex}.stations,.frame-foot{display:none}.trail{z-index:5;--col:1.1rem;width:var(--col);min-height:0;margin:0;position:fixed;top:20vh;bottom:10vh;right:.4rem}.trail-rabbit{background:0 0}main{padding-inline:1rem 2.25rem}.hero{min-height:auto;padding:5rem 0 2.5rem}hr{margin-block:4rem 3.5rem}}@media (width<=75rem){.split{grid-template-columns:minmax(0,1fr)}.side{border-top:1px solid var(--trace);border-left:0;padding:1.5rem 0 0;position:static}}@media (width<=64rem){.showcase,.showcase:nth-of-type(2n){grid-template-columns:minmax(0,1fr);gap:1.25rem}.showcase:nth-of-type(2n) .screen{order:0}.showcase>div{max-width:38em}}@media (width<=40rem){.tenure-year.odd{display:none}.position,.facts{grid-template-columns:1fr;gap:.25rem}.facts dd+dt{margin-top:.75rem}}@media (prefers-reduced-motion:reduce){.screen img,.screen:after{transition:none}.hero h1:after,.trail.hopping .trail-rabbit{animation:none}}@media print{:root{--phosphor:#000;--grade:#000;--dim:#444;--rabbit:#000;--trace:#bbb}html,body{color:#000;background:#fff;font-size:10.5pt}.frame,.skip-link,footer,hr,.backdrop{display:none}.frameset{display:block}main{padding:0}h1{text-shadow:none;font-size:24pt}h2{margin-top:1.5rem;font-size:15pt}a,a:visited{color:#000;text-decoration:none}.position,.project,.skills dd{break-inside:avoid}.position+.position{margin-top:1.25rem}}
