@font-face{font-family:VT323;src:url(/fonts/VT323/VT323-Regular.ttf) format('truetype');font-display:swap}@font-face{font-family:DotGothic16;src:url(/fonts/DotGothic16/DotGothic16-Regular.ttf) format('truetype');font-display:swap}:root{color-scheme:light dark;font-family:DotGothic16,monospace;color:light-dark(#171914,#f4f0df);background:light-dark(#f4f0df,#171914);font-synthesis:none;text-rendering:optimizeLegibility;--paper:light-dark(#f4f0df, #171914);--ink:light-dark(#171914, #f4f0df);--muted:light-dark(#52534b, #c1c4b4);--paper-f:#f4f0df;--ink-f:#171914;--cyan:light-dark(#33d4da, #088882);--darkcyan:#088882;--line:rgba(23, 25, 20, 0.24);--display:'VT323',monospace;--pixel:'DotGothic16',monospace}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:84px}body{margin:0;min-width:320px;background:var(--paper)}a,button{color:inherit;font:inherit}a{text-decoration:none}button{cursor:pointer}::selection{color:var(--ink);background:var(--cyan)}.section-wrap{width:min(1160px,calc(100% - 80px));margin-inline:auto}.topbar{height:78px;padding:0 max(40px,calc((100vw - 1160px)/ 2));display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--ink);z-index:3;background:var(--paper);position:sticky;top:0}.brand{display:flex;align-items:center;gap:11px;font:14px/1.05 var(--pixel);letter-spacing:0}.brand-mark{display:grid;place-items:center;width:35px;height:35px;background:#04423f;border:1px solid var(--ink);font:23px/1 var(--display);box-shadow:3px 3px 0 var(--ink)}.main-nav{display:flex;align-items:center;gap:clamp(20px,3.1vw,44px);font:16px var(--display)}.main-nav a{position:relative;padding-block:8px}.main-nav a::after{content:'';position:absolute;right:0;bottom:3px;left:0;height:2px;background:var(--cyan);transform:scaleX(0);transform-origin:left;transition:transform 180ms ease}.main-nav a:focus-visible::after,.main-nav a:hover::after{transform:scaleX(1)}.darkmode-toggle{padding:5px 7px;display:flex;justify-content:center;border-radius:0;background-color:var(--paper);border:1px solid var(--ink)}.darkmode-toggle img{filter:invert(1)}.darkmode-toggle.on img{filter:none}.darkmode-toggle .darkmode-on{display:none}.darkmode-toggle.on .darkmode-on{display:initial}.darkmode-toggle .darkmode-off{display:initial}.darkmode-toggle.on .darkmode-off{display:none}.hero{min-height:655px;padding-block:85px 58px;position:relative;display:grid;grid-template-columns:.94fr 1.06fr;align-items:center;gap:36px}.hero::before{content:'';position:absolute;width:49%;height:65%;right:0;top:16%;background-image:radial-gradient(rgba(23,25,20,.17) .8px,transparent .8px);background-size:9px 9px;opacity:.45;mask-image:linear-gradient(90deg,transparent,#000 25%,#000);pointer-events:none}.hero-copy{position:relative;z-index:1;padding-bottom:5px}.eyebrow{margin:0 0 19px;color:var(--muted);font:13px var(--pixel);letter-spacing:0}.hero .eyebrow{display:flex;align-items:center;gap:9px}.status-dot{background:var(--cyan);box-shadow:0 0 0 3px rgba(19,226,12,.822)}h1,h2,h3,p{margin-top:0}.hero h1{font:clamp(86px,10vw,146px)/.67 var(--display);letter-spacing:0;margin:0 0 33px -6px}.hero h1 span{color:var(--darkcyan)}.cursor-block{display:inline-block;width:.14em;height:.55em;margin-left:.12em;background:var(--ink);vertical-align:baseline;animation:blink 1.1s steps(2,start) infinite}@keyframes blink{to{visibility:hidden}}.hero-role{margin-bottom:16px;font:18px var(--display)}.hero-role span{color:var(--darkcyan)}.hero-intro{max-width:390px;color:var(--muted);font:15px/1.8 var(--pixel)}.hero-actions{display:flex;align-items:center;gap:24px;margin-top:27px}.pixel-button{min-height:48px;padding:0 18px;display:inline-flex;align-items:center;justify-content:center;gap:20px;border:1px solid var(--ink);box-shadow:4px 4px 0 var(--ink);font:17px var(--display);transition:transform 120ms ease,box-shadow 120ms ease}.primary-button{background:var(--cyan)}.pixel-button:hover{transform:translate(3px,3px);box-shadow:1px 1px 0 var(--ink)}.text-link{font:16px var(--display);border-bottom:1px solid var(--ink);padding:6px 0}.text-link span{margin-left:7px}.hero-footnote{display:flex;gap:23px;margin-top:67px;color:var(--muted);font:12px var(--pixel)}.hero-visual{position:relative;z-index:1;min-width:0}.visual-caption,.visual-label{display:flex;justify-content:space-between;align-items:center;font:12px var(--pixel)}.visual-label{padding-bottom:11px;border-bottom:1px solid var(--ink)}.live-label{display:inline-flex;align-items:center;gap:7px}.live-label span{background:#e34b35;width:7px}.scene-container{position:relative;height:392px;overflow:hidden;background-color:#dedbc9;background-image:linear-gradient(rgba(23,25,20,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(23,25,20,.035) 1px,transparent 1px);background-size:24px 24px;touch-action:pan-y}.scene-container::after,.scene-container::before{position:absolute;content:'';pointer-events:none;z-index:1}.scene-container::before{inset:50% 0 auto;height:1px;background:rgba(23,25,20,.13)}.scene-container::after{inset:0 auto 0 50%;width:1px;background:rgba(23,25,20,.13)}#hero-scene{display:block;width:100%;height:100%;position:relative;z-index:2;cursor:grab}#hero-scene:active{cursor:grabbing}.scene-crosshair{position:absolute;z-index:1;top:50%;left:50%;color:rgba(23,25,20,.48);font:26px var(--display);transform:translate(-50%,-50%)}.scene-loading{position:absolute;z-index:2;bottom:13px;left:15px;margin:0;color:var(--muted);font:12px var(--pixel)}.visual-caption{padding-top:11px}.visual-coordinate{position:absolute;top:42px;right:-30px;writing-mode:vertical-rl;color:var(--muted);font:11px var(--pixel)}.hero-index{position:absolute;bottom:27px;left:0;color:var(--muted);font:11px var(--pixel)}.ticker{overflow:hidden;margin-block:40px;height:52px;display:flex;align-items:center;color:var(--ink);background:var(--cyan);border-block:1px solid var(--ink);--gap:31px}.ticker-track{display:flex;width:max-content;animation:ticker 28s linear infinite;font:19px var(--display)}.ticker-group{display:flex;align-items:center;flex-shrink:0;gap:var(--gap);padding-right:var(--gap)}.ticker-track b{font:17px var(--pixel)}@keyframes ticker{to{transform:translateX(-50%)}}@media (prefers-reduced-motion:reduce){.ticker-track{animation:none}}.about{background:#22251e;color:var(--paper-f);border-block:1px solid var(--line)}.about .eyebrow{color:#c1c4b4}.about-inner{min-height:530px;padding-block:90px;display:grid;grid-template-columns:.85fr 1.15fr;align-items:center;gap:clamp(55px,11vw,140px)}.about-photo-wrap{position:relative;width:min(100%,380px);margin-inline:auto}.photo-frame{padding:12px;background:var(--paper);border:1px solid var(--ink);box-shadow:7px 7px 0 var(--ink);transform:rotate(-2deg)}.photo-frame img{display:block;width:100%;aspect-ratio:.91;object-fit:cover;filter:saturate(.77)}.photo-stamp{position:absolute;top:-23px;right:-26px;width:82px;aspect-ratio:1;display:grid;place-content:center;border-radius:50%;background:var(--darkcyan);border:1px solid var(--ink);text-align:center;font:18px/.95 var(--display);transform:rotate(11deg)}.photo-caption{display:block;margin-top:24px;color:#c1c4b4;text-align:center;font:11px var(--pixel)}.about-copy .eyebrow{margin-bottom:17px}.about-copy h2{margin-bottom:26px}.about-copy>p:not(.eyebrow){max-width:490px;color:#c1c4b4;font:14px/1.9 var(--pixel)}.about-signature{margin-top:29px;font:34px var(--display)}.about-signature span{color:var(--darkcyan);font-size:18px}.experience{padding-block:65px}.experience-list{position:relative;padding-left:20px;list-style:none}.experience-list::before{content:'';position:absolute;top:0;left:0;height:100%;width:3px;background:var(--darkcyan);opacity:.5}.experience-title{margin:0 0 4px}.experience-year{margin-left:8px;color:var(--muted);font:14px var(--pixel)}.experience-company{margin:0;color:var(--paper);font:14px var(--pixel);background:var(--ink);padding:0 4px}.experience-description{margin:8px 0 0;color:var(--muted);font:13px/1.7 var(--pixel)}.experience-item{position:relative;padding:0 0 40px 20px}.experience-item:last-child{padding-bottom:0}.experience-item::before{content:'';position:absolute;top:12px;left:-6px;width:12px;height:12px;background:var(--darkcyan);border:2px solid var(--ink)}.experience-subtitle{margin:16px 0 0}.experience-tasks{margin:8px 0 0;padding-left:20px;list-style:disc;color:var(--muted);font:13px/1.7 var(--pixel)}.education{padding-block:65px;background:#22251e;color:var(--paper-f);border-block:1px solid var(--line)}.education .eyebrow{color:#c1c4b4}.education .section-note{color:#c1c4b4}.education-list{position:relative;padding-left:20px;list-style:none}.education-list::before{content:'';position:absolute;top:0;left:0;height:100%;width:3px;background:var(--darkcyan);opacity:.5}.education-item{position:relative;padding:0 0 40px 20px}.education-item::before{content:'';position:absolute;top:12px;left:-6px;width:12px;height:12px;background:var(--darkcyan);border:2px solid var(--ink)}.education-item:last-child{padding-bottom:0}.education-title{margin:0 0 4px}.education-year{margin-left:8px;color:#c1c4b4;font:14px var(--pixel)}.education-institution{margin:0;color:#c1c4b4;font:14px var(--pixel);padding:0 4px}.education-description{margin:8px 0 0;color:#c1c4b4;font:13px/1.7 var(--pixel)}.education-subtitle{margin:16px 0 0}.education-tasks{margin:8px 0 0;padding-left:20px;list-style:disc;color:#c1c4b4;font:13px/1.7 var(--pixel)}.projects,.stack{padding-block:110px 104px}.section-heading{display:flex;align-items:end;justify-content:space-between;margin-bottom:43px}.section-heading .eyebrow{margin-bottom:11px}.about-copy h2,.section-heading h2{font:70px/.88 var(--display);margin:0;letter-spacing:0}.heading-period{color:var(--darkcyan)}.section-note{margin:0 0 3px;color:var(--muted);font:13px/1.7 var(--pixel);text-align:right}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:28px;row-gap:52px}.project-card-wide{grid-column:span 2;display:grid;grid-template-columns:1.3fr .7fr;column-gap:27px;align-items:start}.project-image{display:block;position:relative;height:230px;overflow:hidden;background:#d5d3c7;border:1px solid var(--ink)}.project-card-wide .project-image{height:300px;grid-row:span 3}.project-image img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block;transition:transform .4s cubic-bezier(.2,.75,.3,1),filter .3s ease}.project-image:hover img{transform:scale(1.035);filter:saturate(1.1)}.project-number{position:absolute;top:10px;left:10px;padding:5px 8px;background:var(--cyan);border:1px solid var(--ink);font:15px var(--display)}.project-open{position:absolute;right:10px;bottom:10px;display:grid;width:36px;aspect-ratio:1;place-items:center;background:var(--paper);border:1px solid var(--ink);font:22px var(--display);transition:background 140ms ease}.project-image:hover .project-open{background:var(--cyan)}.project-meta{display:flex;align-items:end;justify-content:space-between;padding-top:15px}.project-type{margin:0 0 5px;color:var(--muted);font:11px var(--pixel)}.project-meta h3{margin:0;font:29px var(--display)}.project-year{color:var(--muted);font:15px var(--display)}.project-description{max-width:500px;margin:12px 0 15px;color:var(--muted);font:13px/1.7 var(--pixel)}.tag-row{display:flex;flex-wrap:wrap;gap:7px}.tag-row span{padding:4px 8px;border:1px solid var(--ink);font:10px var(--pixel)}.projects-footer{display:flex;justify-content:space-between;margin-top:61px;padding-top:12px;border-top:1px solid var(--ink);color:var(--muted);font:11px var(--pixel)}.footer-arrow{color:var(--darkcyan);font-size:18px}.skills{padding-block:65px 65px;color:var(--paper-f);background:#22251e;position:relative}.skills::before{content:'';position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(rgba(244,240,223,.11) .8px,transparent .8px);background-size:8px 8px;mask-image:linear-gradient(90deg,transparent,#000);opacity:.5}.skills-inner{position:relative}.skills .eyebrow{color:#c1c4b4}.skills .section-note{color:#c1c4b4}.skills-list{list-style:none;display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:1rem}.skills-list li{padding:10px;background:var(--paper);background:var(--color);border:1px solid var(--ink-f);transition:background .3s ease,border .3s ease,color .3s ease,transform .3s ease}.skills:hover li{border:1px solid var(--paper-f)}.skills-list li:hover{animation-play-state:paused;transform:translateY(-.2rem);color:var(--paper);background:var(--ink)}.stack{padding-bottom:65px}.stack-item{background:var(--ink);border:2px solid var(--ink);margin-top:2rem}.stack-top span{margin-left:.3rem;margin-top:.3rem;display:inline-block;background-color:var(--paper);padding:.2rem .5rem}.stack-content{display:flex;flex-wrap:wrap;justify-content:start;gap:2rem;margin-top:-1px;padding:3rem;border-width:1px 1px 1px 1px;min-height:200px;background:var(--paper)}.stack-content>span{width:min-content;display:grid;place-items:start;gap:.5rem;background:var(--ink-f);color:var(--paper-f);border:1px solid var(--ink);font:12px var(--pixel);padding:1rem;text-transform:uppercase;transition:background .3s ease,color .3s ease,transform .3s ease}.stack-content>span:hover{background:var(--cyan);color:var(--ink);transform:scale(1.05)}.stack-content img{width:80px;height:80px;display:block;filter:saturate(.5);transition:filter .3s ease,transform .3s ease}.stack-content>span:hover img{filter:saturate(1);transform:scale(1.05)}.contact{padding-block:100px 94px;color:var(--paper-f);background:#22251e;position:relative}.contact::before{content:'';position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(rgba(244,240,223,.11) .8px,transparent .8px);background-size:8px 8px;mask-image:linear-gradient(90deg,transparent,#000);opacity:.5}.contact-inner{position:relative}.contact .eyebrow{color:#aeb19f}.contact h2{margin:0;font:clamp(72px,9vw,118px)/.72 var(--display)}.contact h2>span{color:var(--darkcyan)}.contact-note{margin:29px 0 28px;color:var(--c1c4b4);font:14px var(--pixel)}.contact-links{display:flex;flex-wrap:wrap;gap:10px}.contact-links a,.contact-links button{min-height:43px;display:flex;align-items:center;gap:10px;padding:0 12px;color:var(--paper-f);background:0 0;border:1px solid rgba(244,240,223,.45);font:15px var(--display);transition:background 150ms ease,color 150ms ease}.contact-links a:hover,.contact-links button:hover{color:var(--ink);background:var(--cyan)}.contact-links img{width:18px;height:18px}.contact-links a:hover img,.contact-links button:hover img{filter:invert(1)}.contact-links span{margin-left:8px;color:var(--cyan)}.contact-links a:hover span,.contact-links button:hover span{color:var(--ink)}.footer{min-height:74px;display:flex;justify-content:space-between;align-items:center;gap:15px;color:var(--muted);font:10px var(--pixel)}.footer-brand{color:var(--ink);font:25px var(--display)}.footer-brand span{margin-left:5px;color:var(--darkcyan);font-size:14px}.footer a:not(.footer-brand){color:var(--ink)}@media (max-width:850px){.section-wrap{width:min(100% - 48px,680px)}.topbar{padding-inline:24px;height:auto;min-height:66px;padding:12px 18px 10px;flex-wrap:wrap;gap:12px}.main-nav{order:3;width:100%;justify-content:space-between;gap:8px;overflow-x:auto}.main-nav a{white-space:nowrap;font-size:15px}.hero{min-height:600px;gap:15px}.hero h1{font-size:clamp(80px,12vw,110px)}.scene-container{height:340px}.visual-coordinate{right:-21px}.about-inner{gap:55px}}@media (max-width:620px){html{scroll-padding-top:120px}.section-wrap{width:calc(100% - 36px)}.brand{font-size:11px}.brand-mark{width:31px;height:31px;font-size:21px}.hero{display:flex;flex-direction:column;align-items:stretch;padding-block:52px 55px;gap:42px}.hero h1{font-size:clamp(87px,24vw,122px);margin-bottom:29px}.hero-intro{max-width:340px}.hero-footnote{margin-top:38px}.hero-visual{margin-inline:3px 10px}.scene-container{height:min(88vw,365px)}.hero-index{bottom:17px}.ticker{height:44px}.ticker-track{font-size:16px;gap:22px}.projects,.stack{padding-block:64px}.section-heading{align-items:start;flex-direction:column;gap:16px;margin-bottom:30px}.about-copy h2,.section-heading h2{font-size:60px}.section-note{text-align:left}.project-grid{grid-template-columns:1fr;row-gap:39px}.project-card-wide{grid-column:auto;display:block}.project-card-wide .project-image,.project-image{height:57vw;max-height:310px}.project-card-wide .project-meta{padding-top:15px}.project-description{max-width:440px}.projects-footer{margin-top:43px;gap:20px;font-size:9px}.about-inner{padding-block:70px;grid-template-columns:1fr;gap:62px}.about-photo-wrap{width:min(78%,340px);margin-right:auto;margin-left:8%}.about-copy h2{margin-bottom:23px}.contact{padding-block:75px 70px}.contact h2{font-size:clamp(76px,19vw,103px)}.contact-note{max-width:310px;line-height:1.8}.footer{min-height:100px;padding-block:16px;display:grid;grid-template-columns:1fr 1fr}.footer>:nth-child(even){text-align:right}}@media (prefers-reduced-motion:reduce){*,::after,::before{scroll-behavior:auto!important;animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important}}