@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-vietnamese-wght-normal-BUzh504Q.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/bricolage-grotesque-latin-ext-wght-normal-CcLUaPy7.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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;src:url(/assets/bricolage-grotesque-latin-wght-normal-DLoelf7F.woff2)format("woff2-variations");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:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/instrument-sans-latin-ext-wght-normal-B5bTHO_g.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/instrument-sans-latin-wght-normal-BbzFLZTg.woff2)format("woff2-variations");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:Kaushan Script;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/kaushan-script-latin-ext-400-normal-CW-Pyyvv.woff2)format("woff2"),url(/assets/kaushan-script-latin-ext-400-normal-Dmz6mG63.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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:Kaushan Script;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/kaushan-script-latin-400-normal-DtTcRpVb.woff2)format("woff2"),url(/assets/kaushan-script-latin-400-normal-DZZZR3n8.woff)format("woff");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{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#1c1c1a;--surface:#262624;--ink:#edebe4;--on-ink:#1c1c1a;--text:#c9c8bf;--muted:#afaca1;--line:#36352f;--line-strong:#46453e;--soft:#22221f;--placeholder:#2c2c29;--live:#0f9f6e;--link:#edebe4;--block:#c9c8bf;--block-ink:#141413;--block-text:#3d3c37;--shadow-sm:0 1px 2px #00000040, 0 2px 8px #0000002e;--shadow-md:0 2px 4px #00000038, 0 14px 30px -8px #00000073;--shadow-lg:0 4px 10px #00000040, 0 30px 60px -16px #0009;--font-display:"Bricolage Grotesque Variable", system-ui, sans-serif;--font-body:"Instrument Sans Variable", system-ui, sans-serif;--font-name:"Kaushan Script", var(--font-display);--radius:22px;--container:1180px;--gutter:clamp(20px, 5vw, 48px);--section-gap:clamp(64px, 7.5vw, 112px);--line-width:3px}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.55}#root{flex-direction:column;min-height:100svh;display:flex}main{flex:1}h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}ul,ol{padding:0;list-style:none}img{max-width:100%;height:auto;display:block}a{color:inherit}:focus-visible{outline:3px solid var(--link);outline-offset:3px}[id]{scroll-margin-top:24px}.container{width:100%;max-width:calc(var(--container) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.section{padding-bottom:var(--section-gap)}.h2{font-family:var(--font-display);letter-spacing:-.04em;font-size:clamp(34px,4vw,56px);font-weight:800;line-height:.95}.h3{font-family:var(--font-display);letter-spacing:-.02em;font-size:clamp(20px,1.7vw,23px);font-weight:800;line-height:1.1}.lead{max-width:46ch;color:var(--muted);margin-top:16px;font-size:17px}.actions{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.btn{min-height:52px;font:600 16px/1 var(--font-body);cursor:pointer;border:1.5px solid #0000;border-radius:999px;justify-content:center;align-items:center;padding:0 26px;text-decoration:none;transition:background-color .15s,border-color .15s;display:inline-flex}.btn--sm{min-height:40px;padding:0 16px;font-size:14px}.btn--dark{background:var(--ink);color:var(--on-ink)}.btn--dark:hover{background:var(--text)}.btn--light{background:var(--surface);border-color:var(--line-strong);box-shadow:var(--shadow-sm)}.btn--light:hover{border-color:var(--ink)}.btn--outline{background:var(--surface);border-color:var(--ink)}.btn--outline:hover{background:var(--soft)}.btn--soft{background:var(--bg)}.btn--soft:hover{background:var(--line)}.btn--inverse{background:var(--block-ink);color:var(--block)}.btn--inverse:hover{background:var(--surface)}.btn--ghost{color:var(--block-ink);border-color:#14141373}.btn--ghost:hover{background:#1414130f}.pill{border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-sm);color:var(--text);border-radius:999px;align-items:center;gap:10px;padding:8px 16px;font-size:14px;font-weight:500;display:inline-flex}.pill__live{background:var(--live);border-radius:50%;flex:none;width:9px;height:9px}.tags{flex-wrap:wrap;gap:8px;display:flex}.tag{background:var(--soft);color:var(--text);border-radius:999px;align-items:center;gap:7px;padding:5px 11px;font-size:13px;font-weight:500;display:inline-flex}.tag--area{background:color-mix(in srgb, var(--c) 12%, transparent);color:var(--ink);font-weight:600}.tag--dark{background:var(--ink);color:var(--on-ink);font-weight:600}.chip{border:1px solid var(--line-strong);background:var(--surface);min-height:44px;box-shadow:var(--shadow-sm);color:var(--ink);font:600 15px/1 var(--font-body);cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:0 16px;display:inline-flex}.chip[aria-pressed=true]{border-color:var(--ink);background:var(--ink);color:var(--on-ink)}.tag--area:before,.chip--dot:before{content:"";background:var(--c);border-radius:50%;width:8px;height:8px}.chip--dot:before{width:10px;height:10px}.stack{flex-wrap:wrap;gap:6px;display:flex}.stack li{border:1px solid var(--line);border-radius:8px;padding:4px 10px;font-size:13px;font-weight:500}.header{justify-content:space-between;align-items:center;gap:16px;padding-block:24px;display:flex}.header__name{font-family:var(--font-name);margin-left:-.21em;margin-block:-9px;padding-block:9px;font-size:26px;font-weight:400;line-height:1;text-decoration:none;display:inline-block}.header__nav{border:1px solid var(--line);background:var(--surface);box-shadow:var(--shadow-sm);border-radius:999px;gap:4px;padding:5px;font-size:15px;font-weight:500;display:flex}.header__nav a{border-radius:999px;padding:9px 16px;text-decoration:none}.header__nav a:hover{background:var(--soft)}.footer{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:12px 24px;padding-block:32px 40px;font-size:14px;display:flex}.footer__links{gap:20px;display:flex}.footer__links a{margin-block:-11px;padding-block:11px;display:inline-block}.footer__links a:hover{color:var(--ink)}.hero{isolation:isolate;position:relative}.hero:before{content:"";z-index:-1;background-image:radial-gradient(560px 440px at 80% 42%,#c9c8bf1a,#0000 70%),radial-gradient(#ffffff0d 1px,#0000 1.5px);background-size:auto,22px 22px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#000 40%,#0000);mask-image:linear-gradient(#000 40%,#0000)}.hero__inner{grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:clamp(32px,6vw,96px);padding-top:clamp(32px,6vw,88px);display:grid}.hero__avatar{width:clamp(220px,25vw,350px)}.hero__name{font-family:var(--font-display);letter-spacing:-.045em;margin-top:28px;font-size:clamp(44px,6vw,88px);font-weight:800;line-height:.9}.hero__headline{text-wrap:pretty;max-width:30ch;margin-top:28px;font-size:clamp(19px,1.6vw,23px);font-weight:500;line-height:1.3}.hero__intro{text-wrap:pretty;max-width:54ch;color:var(--muted);margin-top:18px;font-size:17px;line-height:1.6}.hero .actions{margin-top:36px}.hero__stem{width:var(--line-width);background:var(--ink);grid-column:1/-1;justify-self:center;height:88px;margin-top:56px;position:relative}.hero__stem:after{content:"";border:var(--line-width) solid var(--ink);background:var(--bg);border-radius:50%;width:14px;height:14px;position:absolute;bottom:-14px;left:50%;translate:-50%}.avatar{--ring:var(--line-strong);--gap:var(--bg);aspect-ratio:1;background:var(--ring);box-shadow:var(--shadow-md);border-radius:50%;padding:3px}.avatar>*{border:4px solid var(--gap);object-fit:cover;object-position:center 20%;border-radius:50%;width:100%;height:100%}.avatar__empty{color:var(--muted);background:linear-gradient(165deg,#3b3a35,#262522);place-items:center;font-size:14px;font-weight:500;display:grid}.avatar--sm{flex:none;width:84px}.avatar--sm .avatar__empty{font-size:0}.avatar--portrait{aspect-ratio:4/5;margin-right:var(--frame-offset,18px);box-shadow:var(--shadow-lg);background:0 0;border-radius:28px;padding:0;position:relative}.avatar--portrait>*{border-radius:inherit;border:0}.avatar--portrait:after{content:"";z-index:-1;translate:var(--frame-offset,18px) var(--frame-offset,18px);border-radius:inherit;border:1.5px solid #c9c8bf73;position:absolute;inset:0}.shot{--ratio:16 / 10;border:1px solid var(--line);background:var(--placeholder);box-shadow:var(--shadow-lg);border-radius:18px;overflow:hidden}.shot--framed:before{content:"";border-bottom:1px solid var(--line);background:radial-gradient(circle at 18px 50%, var(--line-strong) 4.5px, transparent 5px), radial-gradient(circle at 34px 50%, var(--line-strong) 4.5px, transparent 5px), radial-gradient(circle at 50px 50%, var(--line-strong) 4.5px, transparent 5px), var(--soft);height:34px;display:block}.shot>img,.shot__empty{width:100%;aspect-ratio:var(--ratio);object-fit:cover;object-position:top}.shot__empty{color:var(--muted);place-items:center;font-size:14px;display:grid}.shot--hero{--ratio:16 / 9;border-radius:24px}.section--projects{padding-top:clamp(40px,5vw,56px)}.section__head{text-align:center;flex-direction:column;align-items:center;display:flex}.filters{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:28px;display:flex}.tree{--branch:45.5px;grid-template-columns:minmax(0,1fr) 88px minmax(0,1fr);row-gap:26px;margin-top:56px;display:grid;position:relative}.tree:before{content:"";inset:0 auto 0 calc(50% - var(--line-width) / 2);width:var(--line-width);border-radius:var(--line-width);background:var(--ink);position:absolute}.tree__item{grid-row:var(--row);align-self:start;padding-top:6px;position:relative}.tree__item--left{grid-column:1}.tree__item--right{grid-column:3}.tree__item:before{content:"";width:var(--branch);border-bottom:var(--line-width) solid var(--c);height:40px;position:absolute;top:14px}.tree__item--right:before{left:calc(var(--branch) * -1);border-left:var(--line-width) solid var(--c);border-bottom-left-radius:var(--radius)}.tree__item--left:before{right:calc(var(--branch) * -1);border-right:var(--line-width) solid var(--c);border-bottom-right-radius:var(--radius)}.tree__item:after{content:"";border:4px solid var(--c);background:var(--bg);border-radius:50%;width:18px;height:18px;position:absolute;top:5px}.tree__item--right:after{left:-53px}.tree__item--left:after{right:-53px}.tree__end{justify-content:center;margin-top:32px;display:flex}.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-md);transition:box-shadow .2s;overflow:hidden}.card:hover{box-shadow:var(--shadow-lg)}.card .shot{--ratio:2 / 1;box-shadow:none;border:0;border-bottom:1px solid var(--line);border-radius:0}.card--featured .shot{--ratio:16 / 10}.card__body{padding:22px 24px 26px}.card__title{font-family:var(--font-display);letter-spacing:-.025em;margin-top:14px;font-size:24px;font-weight:800;line-height:1.1}.card__title a{margin-block:-9px;padding-block:9px;text-decoration:none;display:inline-block}.card__title a:hover{text-underline-offset:4px;text-decoration:underline;text-decoration-thickness:2px}.card__text{color:var(--text);margin-top:8px}.card .stack{margin-top:16px}.card .actions{gap:8px;margin-top:18px}.rows{border-bottom:1px solid var(--line-strong);margin-top:32px}.row{border-top:1px solid var(--line-strong);flex-wrap:wrap;gap:8px 48px;padding-block:30px;display:flex}.row__period{color:var(--muted);flex:0 0 220px;font-size:15px;font-weight:500}.row__body{flex:360px;min-width:0}.row__org{margin-top:8px;font-weight:600}.row__text{max-width:62ch;color:var(--text);margin-top:12px}.row__links{flex-wrap:wrap;gap:8px 24px;margin-top:14px;font-weight:600;display:flex}.row__links a,.panel__list h3 a{color:var(--link)}.split{flex-wrap:wrap;gap:20px;display:flex}.panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:0;box-shadow:var(--shadow-sm);flex:340px;padding:clamp(24px,3vw,36px)}.panel__title{font-family:var(--font-display);letter-spacing:-.03em;margin-bottom:16px;font-size:clamp(24px,2.4vw,32px);font-weight:800;line-height:1}.panel__list li{border-top:1px solid var(--line);padding-block:18px}.panel__list li:last-child{padding-bottom:0}.panel__list h3{font-size:18px;font-weight:600}.panel__list p{color:var(--text);margin-top:6px}.panel__list .panel__meta{color:var(--muted);margin-top:2px;font-size:14px}.skills{border-bottom:1px solid var(--line-strong);margin-top:32px}.skills__row{border-top:1px solid var(--line-strong);flex-wrap:wrap;gap:4px 48px;padding-block:18px;display:flex}.skills dt{color:var(--ink);flex:0 0 220px;font-weight:600}.skills dd{min-width:0;color:var(--text);flex:360px}.contact{background:var(--block);color:var(--block-ink);box-shadow:var(--shadow-lg);border-radius:32px;padding:clamp(24px,6vw,80px)}.contact .avatar{--ring:var(--block-ink);--gap:var(--block);box-shadow:none}.contact .avatar__empty{background:#b3b1a7}.contact__head{flex-wrap:wrap;align-items:center;gap:20px 28px;display:flex}.contact__text{max-width:46ch;color:var(--block-text);margin-top:24px;font-size:18px}.contact .actions{margin-top:32px}.back{align-items:center;gap:6px;min-height:44px;margin-top:8px;font-weight:600;text-decoration:none;display:inline-flex}.project__head{padding-block:clamp(24px,4vw,48px)}.project__title{font-family:var(--font-display);letter-spacing:-.045em;overflow-wrap:anywhere;margin-top:24px;font-size:clamp(38px,5.4vw,76px);font-weight:800;line-height:.9}.project__summary{max-width:36ch;margin-top:24px;font-size:clamp(18px,1.6vw,22px);font-weight:500;line-height:1.35}.project__head .actions{margin-top:32px}.project__layout{flex-flow:row-reverse wrap;align-items:flex-start;gap:40px 64px;padding-block:clamp(48px,6vw,80px);display:flex}.project__facts{flex:300px}.project__facts dl>div{border-bottom:1px solid var(--line);padding-block:14px}.project__facts dl>div:last-child{border-bottom:0;padding-bottom:0}.project__facts dt{color:var(--muted);font-size:14px}.project__facts dd{margin-top:4px;font-weight:600}.project__facts .stack{margin-top:6px}.prose{min-width:0;max-width:68ch;color:var(--text);flex:999 520px;font-size:17px;line-height:1.65}.prose>*+*{margin-top:14px}.prose h2{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);margin-top:48px;font-size:clamp(24px,2.2vw,30px);font-weight:800;line-height:1.1}.prose h2:first-child{margin-top:0}.prose h3{color:var(--ink);margin-top:32px;font-size:19px}.prose ul{padding-left:22px;list-style:outside}.prose ol{padding-left:22px;list-style:decimal}.prose li+li{margin-top:6px}.prose a{color:var(--link)}.prose img{border-radius:16px}.prose code{background:var(--surface);border-radius:6px;padding:2px 6px;font-size:.9em}.project__gallery{padding-bottom:clamp(56px,7vw,96px)}.gallery{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:20px;display:grid}.gallery .shot>img{aspect-ratio:auto}.next{background:var(--block);color:var(--block-ink);box-shadow:var(--shadow-lg);border-radius:28px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 24px;padding:clamp(28px,4vw,44px);text-decoration:none;display:flex}.next>span:first-child{min-width:0}.next__label{color:var(--block-text);font-size:15px;display:block}.next__title{font-family:var(--font-display);letter-spacing:-.035em;margin-top:6px;font-size:clamp(28px,3.4vw,44px);font-weight:800;line-height:1;display:block}.next__text{color:var(--block-text);margin-top:10px;display:block}.next__icon{background:var(--block-ink);width:56px;height:56px;color:var(--block);border-radius:50%;flex:none;place-items:center;display:grid}.notfound{justify-items:start;gap:20px;padding-block:80px 120px;display:grid}@media (width<=900px){.hero__stem{display:none}.section--projects{padding-top:72px}.tree{--branch:21.5px;grid-template-columns:40px minmax(0,1fr);row-gap:22px}.tree:before{left:calc(20px - var(--line-width) / 2)}.tree .tree__item{grid-area:auto/2}.tree .tree__item:before{right:auto;left:calc(var(--branch) * -1);border-right:0;border-left:var(--line-width) solid var(--c);border-bottom-right-radius:0;border-bottom-left-radius:14px}.tree .tree__item:after{left:-29px;right:auto}}@media (width<=760px){.header__nav{display:none}.hero__inner{grid-template-columns:minmax(0,1fr)}.hero__avatar{--frame-offset:12px;width:min(100% - var(--frame-offset), 320px);margin-top:44px}.hero .actions .btn,.contact .actions .btn,.card .actions .btn{flex:auto}.card__title{font-size:22px}.row__period,.skills dt{flex-basis:100%}.gallery{grid-template-columns:minmax(0,1fr)}}
