@font-face{font-family:Archivo;font-style:italic;font-weight:400;font-stretch:100%;font-display:swap;src:url(/fonts/archivo-italic-400-latin.woff2)format("woff2");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}@font-face{font-family:Archivo;font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(/fonts/archivo-normal-400-latin.woff2)format("woff2");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}@font-face{font-family:Archivo;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/archivo-normal-400-latin.woff2)format("woff2");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}@font-face{font-family:Archivo;font-style:normal;font-weight:600;font-stretch:100%;font-display:swap;src:url(/fonts/archivo-normal-400-latin.woff2)format("woff2");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}@font-face{font-family:Archivo;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/archivo-normal-400-latin.woff2)format("woff2");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}@font-face{font-family:Space Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/space-mono-normal-400-latin.woff2)format("woff2");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}@font-face{font-family:Space Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/space-mono-normal-700-latin.woff2)format("woff2");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{--bg:#0c0d0b;--ink:#e9ece2;--soft:#9aa08b;--faint:#5a6052;--hair:#b4bea524;--grid:#9bb06912;--accent:#9bb069;--sans:"Archivo", system-ui, sans-serif;--mono:"Space Mono", monospace}html.light{--bg:#f4f2ea;--ink:#3c4626;--soft:#6f7a52;--faint:#737b63;--hair:#5a6e322e;--grid:#5a6e320f;--accent:#5f7a2e}body{transition:background-color .45s,color .45s}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}::selection{background:var(--accent);color:var(--bg)}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;letter-spacing:.1px;font-size:17px;line-height:1.6;overflow-x:hidden}a{color:inherit}.wrap{z-index:1;max-width:740px;margin:0 auto;padding:0 36px;position:relative}@media (width<=640px){.wrap{padding-left:24px;padding-right:24px}}body{background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px), radial-gradient(ellipse 700px 650px at 50% 0, #9bb06912, transparent 80%);background-position:top;background-repeat:repeat,repeat,no-repeat;background-size:48px 48px,48px 48px,100% 100%}.nav-right{align-items:center;gap:16px;display:flex}.theme-tg{-webkit-appearance:none;appearance:none;border:1px solid var(--hair);color:var(--soft);cursor:pointer;background:0 0;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;transition:color .25s,border-color .25s,transform .35s;display:flex}.theme-tg:hover{color:var(--accent);border-color:var(--accent);transform:rotate(20deg)}.theme-tg .ic-moon{display:none}.theme-tg .ic-sun{display:block}html.light .theme-tg .ic-sun{display:none}html.light .theme-tg .ic-moon{display:block}.sidenav{z-index:40;border-right:1px solid var(--hair);flex-direction:column;align-items:flex-end;gap:15px;padding-right:18px;display:flex;position:fixed;top:50%;right:34px;transform:translateY(-50%)}.sidenav a{font-family:var(--mono);color:var(--faint);align-items:center;gap:14px;font-size:13px;text-decoration:none;transition:color .3s;display:flex}.sidenav a .nm{opacity:0;white-space:nowrap;transition:opacity .3s,transform .3s;transform:translate(6px)}.sidenav:hover a .nm,.sidenav a.active .nm{opacity:1;transform:translate(0)}.sidenav a .tk{background:var(--faint);width:13px;height:1px;transition:width .35s,background-color .35s}.sidenav a:hover,.sidenav a.active{color:var(--ink)}.sidenav a.active .tk{background:var(--ink);width:30px}@media (width<=1040px){.sidenav{display:none}}nav{z-index:2;border-bottom:1px solid var(--hair);padding:22px 0;position:relative}.nav-in{max-width:740px;font-family:var(--mono);grid-template-columns:1fr auto 1fr;align-items:center;margin:0 auto;padding:0 36px;font-size:13px;display:grid}.nav-in .mark{letter-spacing:-.5px;justify-self:start;font-size:16px;font-weight:700;text-decoration:none}.nav-in .mark span{color:var(--accent)}.nav-links{justify-self:center;gap:8px;display:flex}.nl{color:var(--soft);padding:8px 16px;text-decoration:none;position:relative;overflow:hidden}.nl .roll{height:1.25em;display:block;position:relative;overflow:hidden}.nl .roll .t{transition:transform .4s cubic-bezier(.6,.05,.05,1);display:block}.nl .roll .t.b{color:var(--accent);position:absolute;top:100%;left:0}.nl:hover .roll .t{transform:translateY(-100%)}.nl:after{content:"";background:var(--accent);transform-origin:0;height:1px;transition:transform .4s cubic-bezier(.6,.05,.05,1);position:absolute;bottom:4px;left:16px;right:16px;transform:scaleX(0)}.nl:hover:after{transform:scaleX(1)}.nav-av{border:1px solid var(--hair);cursor:pointer;border-radius:50%;justify-content:center;justify-self:end;align-items:center;width:40px;height:40px;display:flex;position:relative}.nav-av .blob{background:linear-gradient(140deg,#9bb069,#6f86c4 55%,#b890d6);border-radius:46% 54% 50% 50%/40% 40% 60% 60%;width:24px;height:30px}.social{border:1px solid var(--hair);opacity:0;visibility:hidden;transform-origin:100% 0;z-index:50;border-radius:12px;min-width:230px;padding:8px;transition:opacity .3s,transform .35s cubic-bezier(.2,.8,.2,1),visibility .3s;position:absolute;top:calc(100% + 12px);right:0;transform:translateY(-10px)scale(.97)}.nav-av:hover .social{opacity:1;visibility:visible;transform:translateY(0)scale(1)}.social .shd{font-family:var(--mono);letter-spacing:1px;color:var(--faint);padding:6px 12px 8px;font-size:10.5px}.social a{color:var(--soft);border-radius:7px;align-items:center;gap:11px;padding:9px 12px;text-decoration:none;transition:background-color .2s,color .2s;display:flex}.social a:hover{color:var(--ink);background:#9bb0691a}.social a .ic{width:16px;color:var(--accent);flex-shrink:0;justify-content:center;display:flex}.social a .pf{flex:1;font-size:14px}.social a .hd{font-family:var(--mono);color:var(--faint);font-size:11px}.social a:hover .hd{color:var(--accent)}@media (width<=640px){.nav-in{grid-template-columns:auto 1fr auto;column-gap:10px}.nav-links{gap:2px}.nl{padding:8px 9px;font-size:13px}}.nav-right{justify-self:end}.social{background:var(--bg)}.nav-av:focus-within .social{opacity:1;visibility:visible;transform:none}@media (width<=640px){.nav-in{grid-template-columns:1fr auto;row-gap:12px;padding-left:24px;padding-right:24px}.nav-right{grid-area:1/2}.nav-links{grid-area:2/1/auto/-1;justify-content:space-between;justify-self:stretch;gap:0}.nl{padding:8px;font-size:12px}}.nav-in .mark{justify-content:center;align-items:center;min-width:44px;min-height:44px;display:inline-flex}.brand-logo{display:block}.mobile-menu{display:none}@media (width<=640px){.site-nav{z-index:50;background:var(--bg);border:1px solid var(--hair);border-radius:12px;margin:12px 12px 0;padding:8px 0;position:sticky;top:12px;box-shadow:0 4px 16px #0000000f}.site-nav .nav-in{grid-template-columns:minmax(0,1fr) auto auto;gap:8px;padding:0 10px 0 16px;position:static}.site-nav .nav-links,.site-nav .nav-av{display:none}.site-nav .nav-right{grid-area:1/2}.site-nav .mark{gap:10px}.site-nav .theme-tg{background:var(--grid);border:0;width:44px;height:44px}.mobile-menu{grid-area:1/3;display:block}.mobile-menu summary{cursor:pointer;background:var(--ink);min-height:44px;color:var(--bg);font:11px var(--mono);border:0;border-radius:8px;align-items:center;gap:10px;padding:0 15px;list-style:none;display:flex}.mobile-menu summary::-webkit-details-marker{display:none}.menu-icon{width:14px;height:12px;display:block;position:relative}.menu-icon i{background:currentColor;width:14px;height:1px;transition:transform .18s;position:absolute;top:3px;left:0}.menu-icon i:last-child{width:10px;top:9px;left:4px}.mobile-menu[open] .menu-icon i:first-child{transform:translateY(3px)rotate(45deg)}.mobile-menu[open] .menu-icon i:last-child{width:14px;left:0;transform:translateY(-3px)rotate(-45deg)}.mobile-panel{background:var(--bg);border:1px solid var(--hair);border-radius:12px;max-height:calc(100dvh - 100px);padding:24px;position:absolute;top:calc(100% + 8px);left:-1px;right:-1px;overflow:auto;box-shadow:0 16px 32px #00000029}.mobile-panel-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.mobile-label{font:9px var(--mono);letter-spacing:1.5px;color:var(--accent)}.mobile-panel-note{font:9px var(--mono);color:var(--soft)}.mobile-menu-title{font:500 27px/1.2 var(--sans);letter-spacing:-.9px;color:var(--ink);margin:18px 0 26px}.mobile-menu-title>span{color:var(--accent)}.mobile-destinations{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.mobile-destinations a{border:1px solid var(--hair);color:var(--ink);background:0 0;border-radius:8px;flex-direction:column;padding:16px;text-decoration:none;transition:background-color .18s;display:flex}.mobile-link-top{color:var(--faint);justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.mobile-link-top small{font:10px var(--mono)}.mobile-link-top>span{color:var(--accent);font-size:17px}.mobile-link-name{font:500 22px var(--sans);letter-spacing:-.4px}.mobile-link-detail{font:11px/1.5 var(--sans);color:var(--soft);margin-top:4px}.mobile-destinations a[aria-current],.mobile-destinations a:hover{border-color:var(--accent);background:var(--grid)}.mobile-cv{background:var(--accent);min-height:48px;color:var(--bg);font:500 12px var(--sans);border-radius:8px;justify-content:space-between;align-items:center;margin-top:16px;padding:0 16px;text-decoration:none;display:flex}.mobile-cv small{font:9px var(--mono);opacity:.65;margin-left:8px}.mobile-cv>span:last-child{font-size:20px}.mobile-location{font:9px var(--mono);color:var(--soft);justify-content:center;align-items:center;gap:7px;margin-top:18px;display:flex}.mobile-location>span{background:var(--accent);border-radius:50%;width:4px;height:4px}}@media (width<=360px){.mobile-panel{padding:18px}.mobile-panel-note{font-size:8px}.mobile-menu-title{font-size:23px}}.nav-in .mark{color:var(--ink)}.brand-logo{width:54px;height:36px}@media (width<=640px){.site-nav .brand-logo{width:50px;height:34px}.mobile-label{align-items:center;gap:8px;display:flex}.menu-spark{font:18px/1 var(--sans);color:var(--accent)}.menu-glyph{width:21px;height:21px;color:var(--accent)}.mobile-panel:before{content:"";background:var(--accent);border-radius:0 0 2px 2px;width:48px;height:2px;position:absolute;top:0;left:24px}.mobile-link-top{margin-bottom:16px}.mobile-link-top>span{transition:transform .2s}.mobile-destinations a:hover .mobile-link-top>span{transform:translate(2px,-2px)}.mobile-destinations a[aria-current] .menu-glyph{stroke-width:2px}.mobile-menu[open] .mobile-panel{animation:.2s ease-out both menu-appear}}@keyframes menu-appear{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}header{border-bottom:1px solid var(--hair);padding:80px 0 66px;position:relative}header>*{z-index:1;position:relative}.idx{font-family:var(--mono);color:var(--accent);letter-spacing:1px;margin-bottom:34px;font-size:12.5px;display:block}.statement{letter-spacing:-1.2px;max-width:16ch;font-size:clamp(33px,6vw,56px);font-weight:600;line-height:1.06}.lede{color:var(--soft);max-width:48ch;margin-top:30px;font-size:18px}.lede em{font-style:italic}.spec{border-top:1px solid var(--hair);grid-template-columns:repeat(5,1fr);gap:20px;margin-top:54px;padding-top:24px;display:grid}.spec-col .k{font-family:var(--mono);color:var(--faint);letter-spacing:.5px;margin-bottom:9px;font-size:11.5px}.spec-col .v{font-size:15px}.spec-col .v.ok{color:var(--accent)}@media (width<=680px){.spec{grid-template-columns:repeat(2,1fr);gap:20px}}@media (width<=640px){header{padding-top:52px;padding-bottom:40px}.idx{margin-bottom:24px}.lede{margin-top:24px;font-size:16px}.spec{margin-top:32px}}#top>.hero-atmosphere{z-index:-1;pointer-events:none;contain:paint;position:absolute;inset:0 -36px;overflow:hidden;-webkit-mask-image:radial-gradient(closest-side at 50% 45%,#000 25%,#0000 100%);mask-image:radial-gradient(closest-side at 50% 45%,#000 25%,#0000 100%)}.aurora-glow{background:radial-gradient(at 28% 30%,#9bb0692e,#0000 55%),radial-gradient(at 78% 55%,#6f86961f,#0000 55%);animation:16s ease-in-out infinite alternate aurora-drift;position:absolute;inset:-8%}html.light .aurora-glow{opacity:.65}.hero-atmosphere.paused .aurora-glow{animation-play-state:paused}@keyframes aurora-drift{0%{transform:translate(-2%,-2%)scale(1)}to{transform:translate(3%,3%)scale(1.04)}}@media (width<=640px){#top>.hero-atmosphere{inset:0 -24px}}section{border-bottom:1px solid var(--hair);padding:72px 0}.shead{justify-content:space-between;align-items:flex-start;margin-bottom:34px;display:flex}.slabel{font-family:var(--mono);color:var(--accent);letter-spacing:1px;padding-top:8px;font-size:12.5px}.snum{letter-spacing:-2px;color:var(--hair);user-select:none;font-size:clamp(34px,7vw,64px);font-weight:700;line-height:.8}.sh{letter-spacing:-.8px;margin-top:-4px;font-size:clamp(26px,4.2vw,38px);font-weight:600}.prose p{color:var(--soft);max-width:60ch;margin-bottom:18px}.prose p:last-child{margin-bottom:0}.prose b{color:var(--ink);font-weight:600}.now-group+.now-group{margin-top:28px}.now-group h3{margin-bottom:12px;font-size:18px;font-weight:600}.now-explorations{max-width:60ch;color:var(--soft);padding-left:20px}.now-explorations li+li{margin-top:12px}.now-explorations li::marker{color:var(--accent)}.work .contribution{border-top:1px solid var(--hair);justify-content:space-between;align-items:baseline;gap:20px;padding:19px 2px;text-decoration:none;transition:padding .3s,color .25s;display:flex}.work .contribution:last-child{border-bottom:1px solid var(--hair)}.work .contribution:hover{color:var(--accent);padding-left:14px}.work .title{align-items:baseline;gap:12px;max-width:32ch;font-size:19px;font-weight:500;line-height:1.25;display:flex}.work .ar{font-family:var(--mono);color:var(--accent);opacity:0;font-size:15px;transition:opacity .3s,transform .3s;transform:translate(-8px)}.work .contribution:hover .ar{opacity:1;transform:translate(0)}.work .kind{color:var(--faint);text-align:right;font-size:13.5px;font-family:var(--mono);flex-shrink:0}.work .contribution:hover .kind{color:var(--accent)}@media (width<=560px){.work .contribution{flex-direction:column;gap:5px}.work .kind{text-align:left}}.xp{border-top:1px solid var(--hair);grid-template-columns:120px 1fr;gap:24px;padding:22px 0;display:grid}.xp:first-of-type{border-top:none;padding-top:0}.xp-when{font-family:var(--mono);color:var(--accent);padding-top:4px;font-size:12.5px}.xp-role{font-size:18px;font-weight:600}.xp-co{color:var(--faint);margin-bottom:9px;font-size:14.5px}.xp-desc{color:var(--soft);max-width:56ch;font-size:15.5px}@media (width<=560px){.xp{grid-template-columns:1fr;gap:6px}.xp-when{padding-top:0}}.tools{color:var(--soft);margin-top:6px;font-size:16.5px;line-height:2.05}.tools b{color:var(--ink);font-weight:600}.reach p{color:var(--soft);max-width:46ch;margin-bottom:5px}.links-list{margin-top:28px}.links-list a{font-family:var(--mono);border-top:1px solid var(--hair);justify-content:space-between;padding:13px 0;font-size:14px;text-decoration:none;transition:padding .25s,color .25s;display:flex}.links-list a:last-child{border-bottom:1px solid var(--hair)}.links-list a:hover{color:var(--accent);padding-left:8px}.links-list a .l{color:var(--faint)}.sh{margin-bottom:26px}@media (width<=640px){section{padding:48px 0}.shead{margin-bottom:24px}.links-list a{gap:12px;font-size:12px}.links-list a span{overflow-wrap:anywhere}}.links-list a{gap:20px;max-width:100%}.links-list a>span:first-child{overflow-wrap:anywhere;min-width:0}@media (width<=640px){main>header,main>section{scroll-margin-top:100px}}.selected-projects{margin-top:64px;scroll-margin-top:90px}.selected-projects>.slabel{letter-spacing:1.5px;margin-bottom:18px;font-size:10px;display:block}.project-row{border-top:1px solid var(--hair);grid-template-columns:28px minmax(0,1fr);gap:18px;padding:26px 0;display:grid}.project-number{font-family:var(--mono);color:var(--faint);padding-top:6px;font-size:11px}.project-heading{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:14px;margin-bottom:10px;display:flex}.project-heading h3{letter-spacing:-.5px;font-size:22px;font-weight:600}.project-category{font-family:var(--mono);color:var(--accent);font-size:10px}.project-row p{color:var(--soft);max-width:62ch;font-size:15px;line-height:1.7}.project-stack{font-family:var(--mono);color:var(--faint);flex-wrap:wrap;gap:6px 16px;margin-top:14px;padding:0;font-size:10px;list-style:none;display:flex}@media (width<=640px){.selected-projects{margin-top:48px}.project-row{grid-template-columns:20px minmax(0,1fr);gap:12px}.project-heading{display:block}.project-heading h3{margin-bottom:4px}}.work{list-style:none}.project-features{max-width:62ch;color:var(--soft);margin:12px 0 0;padding-left:16px;font-size:14px;line-height:1.7}.project-features li+li{margin-top:4px}.project-features li::marker{color:var(--accent)}footer{padding:42px 0 80px}.foot{font-family:var(--mono);color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:10px;font-size:12px;display:flex}.foot .lat{font-style:italic;font-family:var(--sans);color:var(--soft)}:focus-visible{outline:2px solid var(--accent);outline-offset:5px}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}.aurora-glow{animation:none}}html.theme-switching,html.theme-switching *,html.theme-switching :before,html.theme-switching :after{transition:none!important}
