@font-face{font-family:"Redaction 35";src:url(/fonts/redaction-35.woff2)format("woff2");font-display:swap;font-style:normal;font-weight:400}@font-face{font-family:Instrument Sans;src:url(/fonts/instrument-sans.woff2)format("woff2");font-display:swap;font-stretch:75% 100%;font-style:normal;font-weight:400 700}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--page:#fcfaf6;--ink:#262323;--muted:#262323a8;--border:#dedbd4;--surface:#f4f1eb;--focus:#00709c;--sans:"Avenir Next", Avenir, "Helvetica Neue", Helvetica, Arial, sans-serif}*,:before,:after{box-sizing:border-box}html{background:var(--page);color:var(--ink);font-family:var(--sans);scroll-behavior:smooth;text-rendering:optimizelegibility;line-height:1.5}body{background:var(--page);flex-direction:column;min-height:100dvh;margin:0;display:flex}a{color:inherit;touch-action:manipulation;-webkit-tap-highlight-color:#00709c29}a:focus-visible{outline:3px solid var(--focus);outline-offset:4px;border-radius:4px}.skip-link{z-index:100;background:var(--ink);color:#fff;border-radius:8px;align-items:center;min-height:44px;padding:8px 12px;font-size:.75rem;display:inline-flex;position:fixed;top:12px;left:12px;transform:translateY(-180%)}.skip-link:focus{transform:translateY(0)}.site-shell{width:min(100% - 40px,74rem);margin-inline:auto}.site-header{z-index:10;background:var(--page);position:relative}.nav{justify-content:space-between;align-items:center;gap:24px;min-height:76px;display:flex}.nav-links{font-family:"Instrument Sans", var(--sans);align-items:center;gap:24px;font-size:.875rem;font-weight:500;display:flex}.nav-links a{color:var(--muted);text-underline-offset:4px;text-decoration-color:#2623234d;text-decoration-thickness:1px}.nav-links a[aria-current=page]{color:var(--ink);text-decoration-color:currentColor}.wordmark{justify-content:center;align-items:center;min-width:44px;min-height:44px;text-decoration:none;display:inline-flex}.brand-mark{object-fit:contain;width:32px;height:32px;display:block}main{flex:1}.home-main{display:block}.content-shell{width:min(100% - 40px,36rem);margin-inline:auto}.page-main{width:100%;padding-block:clamp(72px,10vw,112px) clamp(96px,14vw,152px)}.page-main h1{color:#262323e0;letter-spacing:-.024em;margin:0 0 32px;font-family:"Redaction 35",Georgia,Times New Roman,serif;font-size:clamp(2rem,4.2vw,2.5rem);font-weight:400;line-height:1.1}.page-main p{color:var(--muted);font-family:"Instrument Sans", var(--sans);margin:0;font-size:1rem;line-height:1.6}.projects-section{background:var(--page);padding-block:clamp(88px,12vw,128px);scroll-margin-top:24px}.projects-section h2,.prose h2{color:#262323e0;letter-spacing:-.018em;margin:0;font-family:"Redaction 35",Georgia,Times New Roman,serif;font-size:1.5rem;font-weight:400;line-height:1.25}.project-list{margin:24px 0 0;padding:0;list-style:none}.project-list a{color:var(--ink);font-family:"Instrument Sans", var(--sans);text-underline-offset:4px;align-items:center;font-size:1rem;font-weight:500;text-decoration-color:#2623234d;display:flex}.prose h2{margin-top:64px}.prose h2+p,.prose p+p{margin-top:20px}.prose ul,.prose ol{color:var(--muted);font-family:"Instrument Sans", var(--sans);margin:20px 0 0;padding-left:24px;line-height:1.6}.prose li+li{margin-top:8px}.prose a{color:var(--ink);text-underline-offset:3px;text-decoration-color:#26232359}.prose code{border:1px solid var(--border);background:var(--surface);border-radius:4px;padding:2px 5px;font-size:.875em}.contact-form{margin-top:40px}.form-field+.form-field{margin-top:24px}.form-field label{color:var(--ink);font-family:"Instrument Sans", var(--sans);margin-bottom:8px;font-size:.875rem;font-weight:600;display:block}.form-field label span{color:var(--muted)}.form-field input,.form-field textarea{border:1px solid var(--border);width:100%;color:var(--ink);font-family:"Instrument Sans", var(--sans);background:#ffffff7a;border-radius:8px;font-size:1rem;display:block;box-shadow:0 1px 2px #2623230a}.form-field input{min-height:46px;padding:9px 12px}.form-field textarea{resize:vertical;min-height:168px;padding:11px 12px;line-height:1.5}.form-field input:focus-visible,.form-field textarea:focus-visible{border-color:var(--focus);outline-offset:1px;outline:3px solid #00709c2e}.form-actions{justify-content:space-between;align-items:flex-end;gap:24px;margin-top:28px;display:flex}.page-main .form-note{max-width:23rem;color:var(--muted);font-size:.75rem;line-height:1.45}.form-submit{font-family:"Instrument Sans", var(--sans);cursor:pointer;flex:none;margin-top:0}.page-main .direct-contact{margin-top:40px;font-size:.875rem}.direct-contact a{color:var(--ink);overflow-wrap:anywhere;text-underline-offset:3px;text-decoration-color:#26232359}.hero{isolation:isolate;flex-direction:column;width:100%;min-height:calc(100dvh + 80px);display:flex;position:relative;overflow:hidden}.hero:before{z-index:-1;background:var(--page) url(/hanoi-compute-dusk.webp) center bottom / cover no-repeat;content:"";image-rendering:pixelated;pointer-events:none;position:absolute;inset:0}.hero:after{z-index:-1;background:linear-gradient(to bottom, #343833a3 0 2px, var(--page) 2px 5px, #464b4485 5px 7px, var(--page) 7px 10px, #5f62586b 10px 12px, var(--page) 12px 15px, #7c7b6d57 15px 17px, var(--page) 17px 20px, #9b958242 20px 22px, var(--page) 22px 25px, #c1b79f2e 25px 27px, var(--page) 27px 100%);content:"";height:44px;image-rendering:pixelated;pointer-events:none;position:absolute;bottom:0;left:0;right:0}.hero-content{text-align:center;width:min(100% - 40px,42rem);padding-block:clamp(68px,10vh,96px) clamp(240px,32vh,320px)}h1,p{text-wrap:pretty}.hero h1{color:#262323e0;letter-spacing:-.024em;margin:0;font-family:"Redaction 35",Georgia,Times New Roman,serif;font-size:clamp(2rem,4.2vw,2.5rem);font-weight:400;line-height:1.1}.lede{max-width:34rem;color:var(--muted);letter-spacing:-.01em;margin:24px auto 0;font-family:Instrument Sans,Arial,sans-serif;font-size:.9375rem;font-weight:500;line-height:1.4}.primary-action{color:#fff;background:linear-gradient(#40403d,#292927);border:1px solid #2c2c2a;border-radius:8px;justify-content:center;align-items:center;min-height:46px;margin-top:30px;padding:0 18px;font-size:.875rem;font-weight:500;text-decoration:none;display:inline-flex;box-shadow:0 0 0 1px #40404026,0 3px 5px #00000029,inset 0 1px #ffffff38,inset 0 -1px 1px #00000047}.primary-action:focus-visible{outline:3px solid var(--focus);outline-offset:3px}.site-footer{isolation:isolate;color:#fcfaf6;background:linear-gradient(#0a1e2d5c,#0a1e2dbd),url(/hanoi-footer-dusk.png) 50% 56%/cover no-repeat;border-top:1px solid #fcfaf661;position:relative;overflow:hidden}.site-footer:before{z-index:-1;content:"";pointer-events:none;background:linear-gradient(#08151f1f,#0000 42%);position:absolute;inset:0}.footer-content{min-height:148px;color:inherit;font-family:"Instrument Sans", var(--sans);text-shadow:0 1px 3px #0000007a;justify-content:center;align-items:center;padding-block:16px;font-size:.75rem;display:flex}.footer-content p{margin:0}@media (hover:hover){.nav-links a:hover,.project-list a:hover,.prose a:hover,.direct-contact a:hover{color:var(--ink);text-decoration-color:currentColor}.primary-action:hover{background:linear-gradient(#484845,#2f2f2d);transform:translateY(-1px)}}@media (width<=34rem){.site-shell{width:min(100% - 32px,74rem)}.nav{min-height:68px}.nav-links{gap:16px;font-size:.8125rem}.brand-mark{width:29px;height:29px}.hero{min-height:calc(100dvh + 80px)}.hero-content{width:min(100% - 32px,42rem);padding-block:56px 240px}.hero h1,.page-main h1{font-size:clamp(1.75rem,8vw,2.125rem)}.content-shell{width:min(100% - 32px,36rem)}.page-main{padding-block:64px 96px}.form-actions{flex-direction:column;align-items:stretch;gap:18px}.form-submit{align-self:flex-start}}@media (prefers-reduced-motion:no-preference){.primary-action,.skip-link{transition:background-color .16s,border-color .16s,color .16s,transform .16s}.hero-content{animation:.65s cubic-bezier(.22,1,.36,1) both rise-in}@keyframes rise-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
