@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;font-stretch:75% 100%;src:url(./bricolage-grotesque-vietnamese-wdth-normal-BKE08zty.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;font-stretch:75% 100%;src:url(./bricolage-grotesque-latin-ext-wdth-normal-DoS1gVTC.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;font-stretch:75% 100%;src:url(./bricolage-grotesque-latin-wdth-normal-Dtb2a5nO.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-greek-400-normal-_efipK4i.woff2) format("woff2"),url(./ibm-plex-sans-greek-400-normal-D9ESIMu3.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-400-normal-CDDApCn2.woff2) format("woff2"),url(./ibm-plex-sans-latin-400-normal-CYLoc0-x.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-greek-500-normal-JMMifIXV.woff2) format("woff2"),url(./ibm-plex-sans-greek-500-normal-CuWXN6rf.woff) format("woff");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-500-normal-6ng42L7E.woff2) format("woff2"),url(./ibm-plex-sans-latin-500-normal-BgVn5rGT.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper: #e9ecee;--paper-deep: #dde2e5;--ink: #18232b;--graphite: #56636c;--rule: #c5cdd2;--signal: #f25c05;--signal-ink: #b84203;--display: "Bricolage Grotesque Variable", "Arial Narrow", sans-serif;--body: "IBM Plex Sans", system-ui, sans-serif;--wrap: 1180px;--gutter: clamp(1.25rem, 4vw, 2.5rem)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);font-size:1.0625rem;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden}img{display:block;max-width:100%}a{color:inherit;text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{color:var(--signal-ink)}:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:2px}h1,h2,h3{font-family:var(--display);margin:0;font-weight:650}p{margin:0}.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}.skip{position:absolute;left:1rem;top:-3rem;z-index:50;background:var(--ink);color:var(--paper);padding:.5rem .9rem}.skip:focus{top:1rem;color:var(--paper)}.nav{position:fixed;inset:0 0 auto;z-index:20;transition:background-color .3s,box-shadow .3s}.nav.is-solid{background:#e9eceeeb;box-shadow:0 1px 0 var(--rule);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.nav-inner{display:flex;align-items:center;justify-content:space-between;height:4rem}.nav-mark{font-family:var(--display);font-weight:650;text-decoration:none;font-size:1.05rem}.nav nav{display:flex;gap:clamp(1rem,3vw,2rem)}.nav nav a{text-decoration:none;font-size:.95rem}.nav nav a:hover{text-decoration:underline}.hero{position:relative;min-height:100svh;display:flex;flex-direction:column;justify-content:flex-end;padding-bottom:clamp(3rem,8vh,6rem);overflow:hidden;cursor:crosshair;touch-action:pan-y}.lanes-canvas{position:absolute!important;top:0;right:0;bottom:0;left:0}.hero:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(ellipse 70% 60% at 12% 92%,var(--paper) 25%,rgba(233,236,238,0) 75%)}.hero-copy{position:relative;z-index:1;pointer-events:none}.hero-copy a{pointer-events:auto}.hero-name{font-size:clamp(4.25rem,14vw,11.5rem);font-weight:700;font-stretch:75%;font-variation-settings:"wdth" 75;line-height:.84;letter-spacing:-.035em;display:flex;flex-direction:column}.hero-name span:last-child{padding-left:.42em}.hero-intro{max-width:30ch;margin-top:1.75rem;font-size:clamp(1.125rem,1.6vw,1.3rem);line-height:1.5}.hero-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2rem}.hero-hint{position:absolute;z-index:1;right:var(--gutter);bottom:clamp(3rem,8vh,6rem);font-size:.875rem;color:var(--graphite);max-width:24ch;text-align:right;pointer-events:none}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:3rem;padding:0 1.4rem;border-radius:999px;font:500 1rem var(--body);text-decoration:none;cursor:pointer;transition:background-color .2s,color .2s,border-color .2s}.btn-solid{background:var(--ink);color:var(--paper);border:1px solid var(--ink)}.btn-solid:hover{background:var(--signal);border-color:var(--signal);color:var(--ink)}.btn-solid:disabled{opacity:.6;cursor:progress}.btn-line{border:1px solid var(--ink);color:var(--ink);background:transparent}.btn-line:hover{background:var(--ink);color:var(--paper)}.section{padding-block:clamp(5rem,12vw,9rem) 0}.section-head{display:grid;gap:.6rem;margin-bottom:clamp(2rem,5vw,3.5rem)}.section-head h2{font-size:clamp(2.25rem,5vw,3.6rem);letter-spacing:-.025em;line-height:1}.section-head p{color:var(--graphite);max-width:52ch}.projects{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}.project{display:grid;grid-template-columns:minmax(0,1fr) 13rem 9rem;gap:1.5rem 2.5rem;align-items:baseline;padding:1.75rem 0;border-bottom:1px solid var(--rule);transition:opacity .25s}.projects:hover .project:not(.is-active){opacity:.38}.project h3{font-size:clamp(1.6rem,3.2vw,2.4rem);letter-spacing:-.02em;line-height:1.05}.project h3 a{text-decoration:none}.project h3 a:hover{color:inherit}.project.is-active h3 a{color:var(--signal-ink)}.project-main p{margin-top:.5rem;color:var(--graphite);max-width:54ch}.project-stack{font-size:.95rem;color:var(--graphite)}.project-links{display:flex;flex-direction:column;gap:.15rem;font-size:.95rem}.project-thumb{display:none}.preview{position:fixed;left:0;top:0;z-index:15;pointer-events:none;width:340px;aspect-ratio:16 / 10;margin:-110px 0 0 28px;opacity:0;transition:opacity .2s}.preview.is-on{opacity:1}.preview img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;object-position:top;border-radius:6px;box-shadow:0 18px 40px -12px #18232b73;opacity:0;transform:scale(.96);transition:opacity .2s,transform .25s}.preview img.is-shown{opacity:1;transform:none}@media (hover: none),(pointer: coarse){.preview{display:none}.projects:hover .project:not(.is-active){opacity:1}.project-thumb{display:block;grid-column:1 / -1;width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:top;border-radius:6px;border:1px solid var(--rule)}}.timeline{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}.job{display:grid;grid-template-columns:11rem minmax(0,1fr);gap:.5rem 2.5rem;padding:1.75rem 0;border-bottom:1px solid var(--rule)}.job-date{color:var(--graphite);font-size:.95rem;padding-top:.2rem;font-variant-numeric:tabular-nums}.job-body h3{font-size:1.4rem;letter-spacing:-.01em;line-height:1.2}.job-company{font-family:var(--body);font-weight:400;color:var(--graphite);font-size:1.05rem}.job-body>p:not(.job-stack){margin-top:.5rem;max-width:62ch}.job-points{margin:.75rem 0 0;padding-left:1.1rem;max-width:62ch}.job-points li{margin-top:.3rem}.job-points li::marker{color:var(--signal)}.job-stack{margin-top:.75rem;font-size:.95rem;color:var(--graphite)}.skills{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2.5rem;border-top:1px solid var(--ink);padding-top:1.75rem}.skill-group h3{font-size:1.15rem;margin-bottom:.75rem}.skill-group ul{list-style:none;margin:0;padding:0;display:grid;gap:.3rem;color:var(--graphite)}.contact{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:clamp(2.5rem,6vw,6rem);align-items:start}.contact-lead h2{font-size:clamp(2.25rem,5vw,3.6rem);letter-spacing:-.025em;line-height:1.02}.contact-lead p{margin-top:1.25rem;color:var(--graphite);max-width:40ch}.contact-lead a{color:var(--ink);word-break:break-word}.form{display:grid;gap:1.25rem}.form label{display:grid;gap:.35rem}.form label span{font-size:.95rem}.form input,.form textarea{font:inherit;color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--graphite);padding:.55rem 0;border-radius:0;resize:vertical}.form input:focus,.form textarea:focus{outline:none;border-bottom:2px solid var(--signal);padding-bottom:calc(.55rem - 1px)}.form-foot{display:flex;flex-wrap:wrap;align-items:center;gap:1rem 1.5rem;margin-top:.5rem}.form-status{font-size:.95rem;max-width:44ch}.form-status.error{color:#a1260d}.footer{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:clamp(5rem,12vw,9rem);padding-block:1.75rem 2.5rem;border-top:1px solid var(--rule);font-size:.95rem;color:var(--graphite)}.footer ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:1.25rem}@media (max-width: 860px){.project{grid-template-columns:minmax(0,1fr);gap:.75rem}.project-links{flex-direction:row;gap:1.25rem}.project-thumb{display:block;grid-column:auto;width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:top;border-radius:6px;border:1px solid var(--rule)}.preview{display:none}.projects:hover .project:not(.is-active){opacity:1}.job{grid-template-columns:minmax(0,1fr)}.skills{grid-template-columns:minmax(0,1fr);gap:1.75rem}.contact{grid-template-columns:minmax(0,1fr)}}@media (max-width: 720px){.hero-hint{left:var(--gutter);right:auto;top:5rem;bottom:auto;text-align:left;max-width:none}.hero:after{background:linear-gradient(to top,var(--paper) 24%,rgba(233,236,238,0) 52%)}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{transition-duration:.01ms!important}}
