@font-face{font-display:swap;font-family:Archivo Variable;font-stretch:62% 125%;font-style:normal;font-weight:100 900;src:url(/static/media/archivo-vietnamese-wdth-normal.164cfad175548d8d65ee.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-display:swap;font-family:Archivo Variable;font-stretch:62% 125%;font-style:normal;font-weight:100 900;src:url(/static/media/archivo-latin-ext-wdth-normal.009725e3b373d5e8f0a1.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-display:swap;font-family:Archivo Variable;font-stretch:62% 125%;font-style:normal;font-weight:100 900;src:url(/static/media/archivo-latin-wdth-normal.bb1dad4de4bf8ae0cf6f.woff2) format("woff2-variations");unicode-range:u+00??,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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/static/media/ibm-plex-mono-cyrillic-ext-400-normal.c5a38b926939e1f1ca99.woff2) format("woff2"),url(/static/media/ibm-plex-mono-cyrillic-ext-400-normal.cd5f0922a60470e1bde4.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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/static/media/ibm-plex-mono-cyrillic-400-normal.c6f862a99064981cc8ee.woff2) format("woff2"),url(/static/media/ibm-plex-mono-cyrillic-400-normal.c45eb9547383e10d0f20.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/static/media/ibm-plex-mono-vietnamese-400-normal.fa0747293826f3ba17f2.woff2) format("woff2"),url(/static/media/ibm-plex-mono-vietnamese-400-normal.d4e725bc424dbf53dc36.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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/static/media/ibm-plex-mono-latin-ext-400-normal.081b2e53053c361ddb54.woff2) format("woff2"),url(/static/media/ibm-plex-mono-latin-ext-400-normal.52bdf7642f685aaccf13.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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/static/media/ibm-plex-mono-latin-400-normal.2b13cc93b07c41b27134.woff2) format("woff2"),url(/static/media/ibm-plex-mono-latin-400-normal.12ede62e388083e7c01c.woff) format("woff");unicode-range:u+00??,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{--ground:#fff;--ink:#000;--ink-max:#000;--mute:#6e6e6e;--rule:#d6d6d6;--fill:#f1f1f1;--ground-rgb:255,255,255;--ink-rgb:0,0,0;--font:"Archivo Variable","Archivo","Helvetica Neue",Helvetica,Arial,sans-serif;--font-mono:"IBM Plex Mono","SFMono-Regular",Consolas,"Liberation Mono",monospace;--wide:112%;--normal:100%;--fs-micro:0.78rem;--fs-small:0.875rem;--fs-body:1.0625rem;--fs-lead:1.3125rem;--fs-h2:2.125rem;--fs-h1:clamp(3.5rem,10vw,8.25rem);--lh-tight:1.15;--lh-body:1.6;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--s8:72px;--s9:112px;--measure:66ch;--bar-h:56px;--rail-w:200px;--gutter:40px;--t-swap:320ms;--t-state:140ms;--ease:cubic-bezier(0.2,0,0,1)}[data-theme=personal]{--ground:#000;--ink:#ededed;--ink-max:#fff;--mute:#9b9b9b;--rule:#2e2e2e;--fill:#141414;--ground-rgb:0,0,0;--ink-rgb:237,237,237}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{font-synthesis-weight:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--ground);color:var(--ink);font-family:var(--font);font-size:var(--fs-body);font-weight:400;line-height:var(--lh-body);transition:background var(--t-swap) var(--ease),color var(--t-swap) var(--ease)}blockquote,body,dd,dl,figure,h1,h2,h3,h4,h5,h6,ol,p,ul{margin:0}ol,ul{list-style:none;padding:0}img,svg{display:block;max-width:100%}::selection{background:var(--ink);color:var(--ground)}.measure{max-width:var(--measure)}.lead{color:var(--ink);font-size:var(--fs-lead);line-height:1.45;max-width:54ch}.prose p+p{margin-top:var(--s4)}.meta{font-size:var(--fs-small)}.meta,.micro{color:var(--mute)}.micro{font-size:var(--fs-micro);letter-spacing:.01em}.section{padding-top:var(--s2);scroll-margin-top:calc(var(--bar-h) + var(--s5))}.section-title{color:var(--ink-max);font-size:var(--fs-h2);font-stretch:var(--normal);font-weight:700;letter-spacing:-.02em;line-height:var(--lh-tight)}.section-lead{color:var(--mute);margin-top:var(--s4);max-width:54ch}.rule{border:0;border-top:1px solid var(--rule)}.records{margin-top:var(--s6)}.record{border-top:1px solid var(--rule);padding:var(--s5) 0}.rec-period{margin-bottom:var(--s2)}.rec-title{color:var(--ink-max);font-size:var(--fs-lead);font-weight:600;line-height:1.25}.rec-sub{color:var(--mute);font-size:var(--fs-small);margin-top:2px}.rec-body{margin-top:var(--s3);max-width:58ch}.lead-record{margin-top:var(--s7);padding-bottom:var(--s7)}.lead-title{color:var(--ink-max);font-size:1.75rem;font-weight:700;letter-spacing:-.015em;line-height:1.2}.lead-body{margin-top:var(--s4);max-width:56ch}a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em;transition:text-decoration-color var(--t-state) var(--ease)}a:hover{text-decoration-thickness:2px}.btn{align-items:center;background:#0000;border:1px solid var(--ink);color:var(--ink);cursor:pointer;display:inline-flex;font:inherit;font-size:var(--fs-small);font-weight:500;gap:var(--s2);line-height:1;padding:11px 18px;text-decoration:none;transition:background var(--t-state) var(--ease),color var(--t-state) var(--ease)}.btn-primary{background:var(--ink);color:var(--ground)}.btn-primary:hover:not(:disabled){background:#0000;color:var(--ink)}.btn-secondary:hover:not(:disabled){background:var(--ink);color:var(--ground)}.btn:disabled{cursor:default;opacity:.45}.link-row{gap:var(--s4)}.inline-list,.link-row{display:flex;flex-wrap:wrap;font-size:var(--fs-small)}.inline-list{color:var(--mute);gap:var(--s1) var(--s3)}.pairs{grid-gap:var(--s5) var(--s6);display:grid;gap:var(--s5) var(--s6)}.pair-label{color:var(--mute);font-size:var(--fs-micro);margin-bottom:var(--s1)}.pair-value{color:var(--ink-max);font-size:var(--fs-small);font-weight:500}:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.skip-link{background:var(--ink);color:var(--ground);font-size:var(--fs-small);left:var(--s2);padding:10px 16px;position:fixed;text-decoration:none;top:var(--s2);transform:translateY(-200%);z-index:1200}.skip-link:focus{transform:none}.sr-only{clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}.content{margin-left:calc(var(--rail-w) + var(--gutter));max-width:calc(var(--measure) + var(--gutter)*2);padding:calc(var(--bar-h) + var(--s8)) var(--gutter) var(--s9)}.content>.section+.section{margin-top:var(--s9)}.swap-wipe{animation:wipe-across .3s var(--ease) forwards;inset:0;pointer-events:none;position:fixed;transform-origin:left center;z-index:900}@keyframes wipe-across{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@media (max-width:1039px){.content{margin-left:0;max-width:calc(var(--measure) + var(--gutter)*2);padding-top:calc(var(--bar-h) + 44px + var(--s7))}}@media (max-width:640px){.content{padding-bottom:var(--s8);padding-left:var(--s5);padding-right:var(--s5)}.content>.section+.section{margin-top:var(--s8)}}@media (prefers-reduced-motion:reduce){.swap-wipe{display:none}}.boot{background:#000;border:0;color:#9b9b9b;cursor:pointer;font-family:var(--font-mono);font-size:13px;inset:0;line-height:1.7;overflow:hidden;padding:clamp(20px,6vh,64px) clamp(20px,5vw,72px);position:fixed;z-index:1000}.boot.is-exiting .boot-hint,.boot.is-exiting .boot-log{opacity:0;transition:opacity .24s var(--ease)}.boot-log{white-space:pre}.boot-line{display:flex;gap:.75em}.boot-gap{height:1.7em}.boot-head,.boot-ok{color:#fff}.boot-ok{flex:none}.boot-prompt{color:#fff;margin-top:.85em}.boot-cursor{animation:boot-blink 1s step-end infinite;background:#fff;display:inline-block;height:1em;margin-left:.12em;vertical-align:text-bottom;width:.6em}@keyframes boot-blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.boot-hint{bottom:clamp(20px,6vh,64px);color:#4a4a4a;font-size:11px;position:absolute;right:clamp(20px,5vw,72px)}.boot-invert{animation:wipe-across .3s var(--ease) forwards;background:#fff;inset:0;position:absolute;transform-origin:left center}@media (max-width:640px){.boot{font-size:11.5px}.boot-hint{left:20px;right:auto}}.bar{align-items:center;background:var(--ground);border-bottom:1px solid var(--rule);display:flex;gap:var(--s5);height:var(--bar-h);justify-content:space-between;left:0;padding:0 var(--gutter);position:fixed;right:0;top:0;z-index:100}.bar-name{color:var(--ink-max);font-size:var(--fs-small);font-weight:600;text-decoration:none;white-space:nowrap}.bar-right{align-items:center;display:flex;gap:var(--s3)}.seg{border:1px solid var(--ink);display:flex}.seg-btn{background:#0000;border:0;color:var(--ink);cursor:pointer;font:inherit;font-size:var(--fs-micro);font-weight:500;line-height:1.2;padding:6px 12px;transition:background var(--t-state) var(--ease),color var(--t-state) var(--ease);white-space:nowrap}.seg-btn+.seg-btn{border-left:1px solid var(--ink)}.seg-btn[aria-pressed=true]{background:var(--ink);color:var(--ground);cursor:default}.seg-btn[aria-pressed=false]:hover{background:var(--fill)}.bar-help{background:#0000;border:1px solid var(--rule);color:var(--mute);cursor:pointer;display:grid;font:inherit;font-size:var(--fs-small);height:28px;place-items:center;transition:color var(--t-state) var(--ease),border-color var(--t-state) var(--ease);width:28px}.bar-help:hover{border-color:var(--ink);color:var(--ink)}.rail{left:0;padding:var(--s8) 0 var(--s7) var(--gutter);position:fixed;top:var(--bar-h);width:var(--rail-w);z-index:90}.rail-list{grid-gap:2px;display:grid;gap:2px}.rail-link{border-left:2px solid #0000;color:var(--mute);display:block;font-size:var(--fs-small);padding:5px 0 5px var(--s3);text-decoration:none;transition:color var(--t-state) var(--ease),border-color var(--t-state) var(--ease)}.rail-link:hover{color:var(--ink)}.rail-link[aria-current=true]{border-left-color:var(--ink-max);color:var(--ink-max);font-weight:600}.rail-rule{margin:var(--s5) var(--s5) var(--s5) var(--s3)}.rail-links{grid-gap:var(--s2);display:grid;font-size:var(--fs-small);gap:var(--s2);padding-left:var(--s3)}.rail-links a{color:var(--mute)}.rail-links a:hover{color:var(--ink)}@media (max-width:1039px){.rail{background:var(--ground);border-bottom:1px solid var(--rule);height:44px;left:0;padding:0;right:0;top:var(--bar-h);width:auto}.rail,.rail-list{align-items:stretch;display:flex}.rail-list{gap:0;overflow-x:auto;padding:0 var(--gutter);scrollbar-width:none}.rail-list::-webkit-scrollbar{display:none}.rail-link{align-items:center;border-bottom:2px solid #0000;border-left:0;display:flex;padding:0 var(--s3);white-space:nowrap}.rail-link[aria-current=true]{border-bottom-color:var(--ink-max);border-left:0}.rail-links,.rail-rule{display:none}}@media (max-width:640px){.bar{gap:var(--s3)}.bar,.rail-list{padding:0 var(--s5)}.bar-name{font-size:var(--fs-micro)}.bar-help{display:none}}.help-scrim{background:rgba(var(--ground-rgb),.86);display:grid;inset:0;padding:var(--s5);place-items:center;position:fixed;z-index:1000}.help{background:var(--ground);border:1px solid var(--ink);padding:var(--s6);width:min(340px,100%)}.help-title{color:var(--ink-max);font-size:var(--fs-lead);font-weight:600}.help-list{grid-gap:var(--s3);display:grid;gap:var(--s3);margin:var(--s5) 0 var(--s6)}.help-row{grid-gap:var(--s4);align-items:baseline;display:grid;font-size:var(--fs-small);gap:var(--s4);grid-template-columns:64px 1fr}.help-keys{color:var(--ink-max);font-family:var(--font-mono)}.help-action{color:var(--mute);margin:0}.overview-name{color:var(--ink-max);display:grid;font-size:var(--fs-h1);font-stretch:var(--wide);font-weight:900;letter-spacing:-.035em;line-height:.86;margin-top:-.06em;text-transform:uppercase}.overview-rule{margin:var(--s7) 0 var(--s6)}.overview-blurb{max-width:48ch}.overview-cta{align-items:center;display:flex;flex-wrap:wrap;gap:var(--s4) var(--s5);margin-top:var(--s7)}.overview-facts{border-top:1px solid var(--rule);grid-template-columns:repeat(2,minmax(0,1fr));margin-top:var(--s8);padding-top:var(--s6)}@media (max-width:640px){.overview-name{line-height:.9}.overview-rule{margin:var(--s6) 0 var(--s5)}.overview-facts{grid-template-columns:1fr}}.proj-tech{margin-top:var(--s4)}.proj-tech span{border-bottom:1px solid var(--rule);padding-bottom:1px}.proj-links{margin-top:var(--s4)}.skill-title{color:var(--mute);font-size:var(--fs-small);font-weight:600;margin-bottom:var(--s3)}.skill-list{color:var(--ink-max);display:flex;flex-wrap:wrap;font-size:var(--fs-body);gap:var(--s2) var(--s4)}.skill-item.is-tail{color:var(--mute)}.resume-contents,.skills-toggle{margin-top:var(--s6)}.resume-contents{display:grid}.resume-item{border-top:1px solid var(--rule);color:var(--ink);padding:var(--s4) 0}.resume-actions{display:flex;flex-wrap:wrap;gap:var(--s3);margin-top:var(--s6)}.about-prose{margin-top:var(--s6);max-width:58ch}.about-detail{grid-gap:var(--s7);align-items:start;border-top:1px solid var(--rule);display:grid;gap:var(--s7);grid-template-columns:200px 1fr;margin-top:var(--s8);padding-top:var(--s6)}.about-portrait{margin:0}.about-portrait img{aspect-ratio:4/5;filter:grayscale(1) contrast(1.05);object-fit:cover;width:100%}.about-facts{align-content:start}@media (max-width:640px){.about-detail{gap:var(--s6);grid-template-columns:1fr}.about-portrait{max-width:180px}}.hobby-meta{align-items:baseline;display:flex;flex-wrap:wrap;gap:var(--s1) var(--s3);margin-top:var(--s4)}.hobby-meta .pair-label{margin-bottom:0}.hobby-link{margin-top:var(--s4)}.contact-email{align-items:baseline;border-bottom:1px solid var(--rule);border-top:1px solid var(--rule);display:flex;flex-wrap:wrap;font-size:var(--fs-lead);gap:var(--s3);justify-content:space-between;margin-top:var(--s6);padding:var(--s4) 0}.contact-copy{background:none;border:0;color:var(--mute);cursor:pointer;font:inherit;font-size:var(--fs-small);padding:0;text-decoration:underline;text-underline-offset:.18em}.contact-copy:hover{color:var(--ink)}.contact-form{grid-gap:var(--s5);display:grid;gap:var(--s5);margin-top:var(--s7);max-width:46rem}.field{display:grid}.input{background:#0000;border:0;border-bottom:1px solid var(--rule);border-radius:0;color:var(--ink-max);font:inherit;font-size:var(--fs-body);padding:var(--s2) 0;transition:border-color var(--t-state) var(--ease);width:100%}textarea.input{line-height:var(--lh-body);resize:vertical}.input::placeholder{color:var(--mute);opacity:1}.input:hover{border-bottom-color:var(--mute)}.input:focus{border-bottom-color:var(--ink-max);border-bottom-width:2px;outline:none;padding-bottom:calc(var(--s2) - 1px)}.input:focus-visible{outline:2px solid var(--ink);outline-offset:4px}.contact-form .btn{justify-self:start}.form-message{border-left:2px solid var(--rule);font-size:var(--fs-small);padding-left:var(--s4)}.form-message.is-success{border-left-color:var(--ink-max);color:var(--ink-max)}.form-message.is-error{border-left-color:var(--mute);color:var(--mute)}.footer{border-top:1px solid var(--rule);display:flex;flex-wrap:wrap;gap:var(--s3);justify-content:space-between;margin-top:var(--s9);padding-top:var(--s4)}.footer-links{display:flex;font-size:var(--fs-micro);gap:var(--s4)}.footer-links a{color:var(--mute)}.footer-links a:hover{color:var(--ink)}
/*# sourceMappingURL=main.a5cfbef6.css.map*/