@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-vietnamese-wdth-normal.rJmnGBSt.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-ext-wdth-normal.7khWdh9v.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/_astro/archivo-latin-wdth-normal.DY7AcnAa.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:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/jetbrains-mono-latin-500-normal.BWZEU5yA.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-500-normal.CJOVTJB7.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/jetbrains-mono-latin-700-normal.BYuf6tUa.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-700-normal.D3wTyLJW.woff)format("woff")}:root{--bg:#ececec;--surface:#fff;--ink:#0a0a0a;--text-2:#3d3d3d;--lime:#a6d23c;--on-lime:#0a0a0a;--danger:#c8102e;--b:2px solid var(--ink);--sh:6px 6px 0 var(--ink);--ease:cubic-bezier(.16, 1, .3, 1);--font-display:"Archivo Variable", "Archivo", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#0c0c0c;--surface:#161616;--ink:#f1f1f1;--text-2:#b4b4b4;color-scheme:dark}}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font:400 17px/1.6 var(--font-display);-webkit-font-smoothing:antialiased;overflow-wrap:break-word;margin:0}img{max-width:100%;height:auto;display:block}a{color:inherit}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.03em;text-wrap:balance;margin:0;font-weight:800;line-height:.98}p{text-wrap:pretty;margin:0}ul{margin:0;padding:0;list-style:none}section[id]{scroll-margin-top:80px}.mono{font-family:var(--font-mono)}.wrap{width:min(1280px,100% - 48px);margin-inline:auto}.skip{background:var(--lime);color:var(--on-lime);border:var(--b);z-index:100;padding:10px 16px;font-weight:700;position:absolute;top:-60px;left:12px}.skip:focus{top:12px}:focus-visible{outline:3px solid var(--ink);outline-offset:3px}mark{background:var(--lime);color:var(--on-lime);padding:0 .12em}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}svg.icon{flex:none;width:1.25em;height:1.25em}.btn{background:var(--surface);min-height:52px;color:var(--ink);border:var(--b);box-shadow:4px 4px 0 var(--ink);font:700 15px/1 var(--font-mono);white-space:nowrap;cursor:pointer;touch-action:manipulation;transition:transform .2s var(--ease), box-shadow .2s var(--ease), background-color .15s;align-items:center;gap:10px;padding:0 24px;text-decoration:none;display:inline-flex}.btn:hover{box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}.btn:active{box-shadow:1px 1px 0 var(--ink);transform:translate(3px,3px)}.btn:disabled{opacity:.6;cursor:progress;transform:none}.btn-lime{background:var(--lime);color:var(--on-lime)}.btn-sm{min-height:44px;padding:0 18px;font-size:14px}.nav{z-index:40;background:var(--bg);border-bottom:var(--b);position:sticky;top:0}.nav .wrap{align-items:center;gap:28px;height:68px;display:flex}.brand{font:800 19px/1 var(--font-display);letter-spacing:-.03em;align-items:center;gap:10px;margin-right:auto;text-decoration:none;display:flex}.brand img{border:var(--b);background:#ececec;width:38px;height:38px;padding:3px}.nav ul{display:flex}.nav ul a{font:500 14px/1 var(--font-mono);padding:10px 16px;text-decoration:none;transition:background-color .15s;display:block}.nav ul a:hover,.nav ul a[aria-current=page]{background:var(--lime);color:var(--on-lime)}.menu-toggle{border:var(--b);background:var(--surface);width:46px;height:46px;color:var(--ink);cursor:pointer;justify-content:center;align-items:center;font-size:22px;display:none}.hero{border-bottom:var(--b);padding:64px 0 88px}.hero .wrap{grid-template-columns:1.25fr .75fr;align-items:center;gap:56px;display:grid}.hero h1{text-transform:uppercase;font-size:clamp(2.3rem,4.4vw,3.8rem);font-stretch:105%}.hero p{max-width:46ch;color:var(--text-2);margin-top:28px;font-size:1.18rem}.actions{flex-wrap:wrap;gap:16px;margin-top:36px;display:flex}.photo{border:var(--b);box-shadow:10px 10px 0 var(--lime), 10px 10px 0 2px var(--ink);background:var(--surface);margin:0;transform:rotate(1.6deg)}.photo img{aspect-ratio:4/5;object-fit:cover;object-position:center top;width:100%}.section{border-bottom:var(--b);padding:104px 0}.h2{text-transform:uppercase;font-size:clamp(2.2rem,5vw,4.4rem);font-stretch:112%}.sub{color:var(--text-2);max-width:54ch;margin-top:18px}.head-row{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:24px;display:flex}.tabs{border:var(--b);box-shadow:var(--sh);background:var(--surface);grid-template-columns:.85fr 1.15fr;margin-top:56px;display:grid}.tablist{border-right:var(--b);display:grid}.tablist button{text-align:left;border:0;border-bottom:var(--b);color:var(--ink);font:700 clamp(1.05rem, 1.6vw, 1.3rem)/1.2 var(--font-display);cursor:pointer;background:0 0;justify-content:space-between;align-items:center;gap:16px;padding:22px 26px;transition:background-color .15s;display:flex}.tablist button:last-child{border-bottom:0}.tablist button:hover{background:color-mix(in srgb, var(--lime) 35%, transparent)}.tablist button[aria-selected=true]{background:var(--lime);color:var(--on-lime)}.panel{flex-direction:column;justify-content:space-between;gap:40px;min-height:380px;padding:clamp(28px,4vw,56px);display:flex}.panel[hidden]{display:none}.panel .icon{width:56px;height:56px}.panel h3{font-size:clamp(1.7rem,3vw,2.6rem)}.panel p{color:var(--text-2);max-width:46ch;margin-top:14px;font-size:1.08rem}.chips{flex-wrap:wrap;gap:8px;display:flex}.chip{border:var(--b);font:500 13px/1 var(--font-mono);background:var(--bg);padding:8px 12px}.chip-lime{background:var(--lime);color:var(--on-lime)}.arrows{gap:12px;display:flex}.arrows .btn{justify-content:center;width:52px;padding:0}.rail{scroll-snap-type:x mandatory;scrollbar-width:thin;scrollbar-color:var(--ink) transparent;gap:24px;margin-top:48px;padding:4px 8px 28px 4px;list-style:none;display:flex;overflow-x:auto}.rail:focus-visible{outline-offset:6px}.proj{background:var(--surface);border:var(--b);box-shadow:var(--sh);transition:transform .25s var(--ease), box-shadow .25s var(--ease);flex-direction:column;display:flex}.rail .proj{scroll-snap-align:start;flex:none;width:min(420px,82vw)}.proj:hover{box-shadow:9px 9px 0 var(--ink);transform:translate(-3px,-3px)}.proj .thumb{border-bottom:var(--b);background:var(--bg);display:block;overflow:hidden}.proj .thumb img{aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%}.proj .body{flex-direction:column;flex:1;gap:10px;padding:22px;display:flex}.proj h3{letter-spacing:-.02em;font-size:1.45rem;line-height:1.05}.proj h3 a{text-decoration:none}.proj h3 a:after{content:"";position:absolute;inset:0}.proj{position:relative}.proj p{color:var(--text-2);font-size:.97rem}.proj .by{font:500 13px/1.3 var(--font-mono);margin-top:auto;padding-top:6px}.proj .by b{background:var(--lime);color:var(--on-lime);padding:2px 6px;font-weight:500}.proj .cats{flex-wrap:wrap;gap:6px;display:flex}.proj .cats span{font:500 12px/1 var(--font-mono);border:1px solid var(--ink);padding:4px 6px}.filters{flex-wrap:wrap;gap:12px;margin-top:40px;display:flex}.filters button{border:var(--b);background:var(--surface);min-height:44px;color:var(--ink);font:700 14px/1 var(--font-mono);cursor:pointer;padding:0 18px;transition:background-color .15s}.filters button:hover{background:color-mix(in srgb, var(--lime) 35%, var(--surface))}.filters button[aria-pressed=true]{background:var(--lime);color:var(--on-lime)}.grid-projects{grid-template-columns:repeat(auto-fill,minmax(min(340px,100%),1fr));gap:32px;margin-top:40px;display:grid}.grid-projects .proj[hidden]{display:none}.stack-grid{grid-template-columns:1fr 1fr;gap:24px;margin-top:56px;display:grid}.stack-box{border:var(--b);background:var(--surface);box-shadow:4px 4px 0 var(--ink);padding:28px}.stack-box:nth-child(5),.stack-box.open{grid-column:1/-1}.stack-box.open h3{margin-bottom:12px}.stack-box.open p{max-width:62ch;font-size:1.05rem}.stack-box h3{font:700 14px/1 var(--font-mono);text-transform:lowercase;margin-bottom:18px}.stack-box.ai{background:var(--lime);color:var(--on-lime);border-color:#0a0a0a;grid-column:1/-1;grid-template-columns:.8fr 1.2fr;align-items:start;gap:32px;display:grid;box-shadow:4px 4px #0a0a0a}.stack-box.ai h3{font:800 clamp(1.5rem, 2.6vw, 2.2rem)/1.05 var(--font-display);text-transform:none;letter-spacing:-.03em;margin:0}.stack-box.ai p{max-width:62ch;font-size:1.05rem}.stack-box.ai p+p{margin-top:12px}.log{border-top:var(--b);margin-top:56px}.entry{border-bottom:var(--b);transition:background-color .15s, padding .3s var(--ease);grid-template-columns:150px 1fr auto 40px;align-items:center;gap:28px;padding:26px 20px;text-decoration:none;display:grid}.entry:hover{background:var(--lime);color:var(--on-lime);padding-left:34px}.entry time{font:500 14px/1 var(--font-mono)}.entry h3{letter-spacing:-.025em;font-size:clamp(1.3rem,2.4vw,2rem);line-height:1.08}.entry .cat{font:500 13px/1 var(--font-mono);border:var(--b);white-space:nowrap;padding:7px 10px}.entry .icon{transition:transform .3s var(--ease);justify-self:end;font-size:26px}.entry:hover .icon{transform:translate(6px)}.log-foot{margin-top:32px}.empty{border:var(--b);background:var(--surface);box-shadow:4px 4px 0 var(--ink);max-width:56ch;margin-top:40px;padding:32px}.about .wrap{grid-template-columns:1.4fr .6fr;align-items:start;gap:64px;display:grid}.statement{font:700 clamp(1.5rem, 3vw, 2.5rem)/1.12 var(--font-display);letter-spacing:-.03em}.about .body{color:var(--text-2);max-width:60ch;margin-top:28px}.about .body+.body{margin-top:14px}.roles{gap:16px;display:grid}.role{border:var(--b);background:var(--surface);box-shadow:4px 4px 0 var(--ink);padding:20px}.role b{font-size:1.1rem;font-weight:800;display:block}.role span{font:400 14px/1.4 var(--font-mono);color:var(--text-2)}.contact .wrap{grid-template-columns:1fr 1fr;align-items:start;gap:64px;display:grid}.contact h2{text-transform:uppercase;font-size:clamp(3rem,8vw,7rem);font-stretch:112%}.lines{gap:12px;margin-top:36px;display:grid}.lines a{font:500 16px/1.3 var(--font-mono);text-underline-offset:4px;align-items:center;gap:12px;display:flex}.lines .icon{font-size:22px}form.contact-form{border:var(--b);box-shadow:var(--sh);background:var(--surface);gap:22px;padding:32px;display:grid}.field{gap:8px;display:grid}.field label{font:700 14px/1 var(--font-mono)}.field input,.field textarea{border:var(--b);background:var(--bg);width:100%;color:var(--ink);font:400 16px/1.4 var(--font-display);border-radius:0;padding:14px 16px}.field textarea{resize:vertical;min-height:130px}.field input::placeholder,.field textarea::placeholder{color:var(--text-2);opacity:.9}.field input:focus-visible,.field textarea:focus-visible{outline:3px solid var(--lime);outline-offset:0;box-shadow:4px 4px 0 var(--ink)}.err{font:500 13px/1.4 var(--font-mono);background:var(--danger);color:#fff;justify-self:start;padding:6px 10px}.hp{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.status{min-height:1.4em;font:500 14px/1.4 var(--font-mono)}.status.bad{color:var(--danger)}form.contact-form .btn{justify-content:center;width:100%}footer.site-footer{border-top:var(--b);padding:32px 0}footer.site-footer .wrap{font:400 14px/1.4 var(--font-mono);flex-wrap:wrap;justify-content:space-between;gap:16px 32px;display:flex}footer.site-footer ul{flex-wrap:wrap;gap:20px;display:flex}footer.site-footer a{text-underline-offset:4px}.page-head{border-bottom:var(--b);padding:72px 0 40px}.page-head h1{text-transform:uppercase;max-width:20ch;font-size:clamp(2.2rem,5vw,4.4rem);font-stretch:112%}.page-head .sub{font-size:1.15rem}.crumbs{font:500 13px/1 var(--font-mono);flex-wrap:wrap;gap:8px;margin-bottom:28px;display:flex}.crumbs a{text-underline-offset:3px}.article{padding:56px 0 96px}.article .wrap{grid-template-columns:minmax(0,1fr) 320px;align-items:start;gap:64px;display:grid}.prose{min-width:0;max-width:68ch}.prose h2{margin:48px 0 16px;font-size:clamp(1.6rem,2.6vw,2.2rem);line-height:1.05}.prose h2:first-child{margin-top:0}.prose p,.prose ul,.prose ol{margin-bottom:18px}.prose ul{padding-left:1.3em;list-style:square}.prose ol{padding-left:1.4em}.prose li{margin-bottom:6px}.prose blockquote{border:var(--b);background:var(--lime);color:var(--on-lime);font:500 14px/1.5 var(--font-mono);margin:0 0 28px;padding:14px 18px}.prose a{text-underline-offset:3px;text-decoration-thickness:2px}.prose code{font:500 .9em var(--font-mono);background:var(--surface);border:1px solid var(--ink);padding:1px 5px}.prose pre{border:var(--b);background:var(--surface);box-shadow:4px 4px 0 var(--ink);font:500 .88rem/1.55 var(--font-mono);tab-size:4;margin:0 0 24px;padding:18px 20px;overflow-x:auto}.prose pre code{font:inherit;background:0 0;border:0;padding:0}.aside{gap:20px;display:grid;position:sticky;top:92px}.aside .box{border:var(--b);background:var(--surface);box-shadow:4px 4px 0 var(--ink);padding:22px}.aside h2{font:700 13px/1 var(--font-mono);letter-spacing:0;text-transform:lowercase;margin-bottom:14px}.aside li{padding:6px 0;font-size:.97rem}.cover{border:var(--b);box-shadow:var(--sh);background:var(--surface);margin:0 0 40px}.cover img{aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%}.cta-band{border:var(--b);box-shadow:var(--sh);background:var(--lime);color:var(--on-lime);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:24px;margin-top:56px;padding:clamp(28px,4vw,48px);display:flex}.cta-band h2{text-transform:none;max-width:22ch;font-size:clamp(1.6rem,3vw,2.4rem)}.cta-band .btn{color:#0a0a0a;background:#fff;border-color:#0a0a0a;box-shadow:4px 4px #0a0a0a}.notfound{padding:120px 0}.notfound h1{text-transform:uppercase;font-size:clamp(4rem,14vw,11rem);font-stretch:125%}@media (prefers-reduced-motion:no-preference){.rise{opacity:0;animation:rise .8s var(--ease) forwards;animation-delay:calc(var(--i,0) * 90ms);transform:translateY(24px)}@keyframes rise{to{opacity:1;transform:none}}.js .reveal{opacity:0;transition:opacity .7s var(--ease), transform .7s var(--ease);transform:translateY(28px)}.js .reveal.in{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.photo{transform:none}}@media (width<=1023px){.nav ul{display:none}.nav ul.open{background:var(--bg);border-bottom:var(--b);display:grid;position:absolute;inset:68px 0 auto}.nav ul.open a{border-top:1px solid var(--ink);padding:16px 24px}.menu-toggle{display:inline-flex}.nav .btn{display:none}.hero .wrap,.about .wrap,.contact .wrap,.article .wrap{grid-template-columns:minmax(0,1fr);gap:48px}.photo{max-width:380px}.aside{position:static}.tabs{grid-template-columns:1fr}.tablist{border-right:0;border-bottom:var(--b);grid-template-columns:1fr 1fr}.tablist button:nth-child(odd){border-right:var(--b)}.tablist button:nth-last-child(-n+2){border-bottom:0}.stack-box.ai{grid-template-columns:1fr;gap:16px}}@media (width<=767px){body{font-size:16px}.wrap{width:min(1280px,100% - 32px)}.section{padding:64px 0}.hero{padding:40px 0 64px}.entry{grid-template-columns:1fr auto;gap:10px 16px;padding:22px 8px}.entry time{grid-column:1/-1}.entry .cat{display:none}.tablist{grid-template-columns:1fr}.tablist button:nth-child(odd){border-right:0}.tablist button:nth-last-child(-n+2){border-bottom:var(--b)}.tablist button:last-child{border-bottom:0}.stack-grid{grid-template-columns:1fr}form.contact-form{padding:22px}.btn{white-space:normal}}footer.site-footer .footer-services{border-bottom:1px solid var(--ink);justify-content:flex-start;align-items:baseline;gap:12px 28px;margin-bottom:20px;padding-bottom:20px}footer.site-footer .footer-services>span{font-weight:700}.incl-grid{grid-template-columns:repeat(2,1fr);gap:24px;margin-top:40px;display:grid}.incl{border:var(--b);background:var(--surface);box-shadow:4px 4px 0 var(--ink);padding:24px 26px}.incl h3{letter-spacing:-.02em;font-size:1.2rem;line-height:1.1}.incl p{color:var(--text-2);margin-top:10px;font-size:.97rem}.incl:first-child{background:var(--lime);color:var(--on-lime);border-color:#0a0a0a;box-shadow:4px 4px #0a0a0a}.incl:first-child p{color:#26330f}.split{grid-template-columns:1.2fr .8fr;align-items:start;gap:56px;display:grid}.fit-list{gap:14px;margin-top:28px;display:grid}.fit-list li{border:var(--b);background:var(--surface);padding:16px 18px 16px 54px;position:relative}.fit-list li:before{content:"";background:var(--lime);border:var(--b);width:18px;height:18px;position:absolute;top:22px;left:18px}.steps{counter-reset:s;border:var(--b);background:var(--surface);grid-template-columns:repeat(4,1fr);gap:0;margin-top:40px;padding:0;list-style:none;display:grid}.steps li{border-right:var(--b);padding:24px}.steps li:last-child{border-right:0}.steps h3{letter-spacing:-.02em;font-size:1.15rem;line-height:1.1}.steps p{color:var(--text-2);margin-top:10px;font-size:.95rem}.faq{border-top:var(--b);max-width:900px;margin-top:40px}.faq details{border-bottom:var(--b)}.faq summary{cursor:pointer;font:800 clamp(1.1rem, 1.8vw, 1.4rem)/1.2 var(--font-display);letter-spacing:-.02em;justify-content:space-between;align-items:center;gap:20px;padding:22px 8px;list-style:none;display:flex}.faq summary::-webkit-details-marker{display:none}.faq summary:hover{background:color-mix(in srgb, var(--lime) 35%, transparent)}.faq summary .icon{transition:transform .3s var(--ease)}.faq details[open] summary .icon{transform:rotate(45deg)}.faq details p{color:var(--text-2);max-width:70ch;padding:0 8px 24px}.svc-card{border:var(--b);background:var(--surface);box-shadow:var(--sh);transition:transform .25s var(--ease), box-shadow .25s var(--ease);flex-direction:column;gap:16px;padding:28px;text-decoration:none;display:flex}.svc-card:hover{box-shadow:9px 9px 0 var(--ink);transform:translate(-3px,-3px)}.svc-card .icon{width:40px;height:40px}.svc-card h2{letter-spacing:-.02em;font-size:1.5rem;line-height:1.05}.svc-card p{color:var(--text-2)}.svc-card .more{font:700 14px/1 var(--font-mono);align-items:center;gap:8px;margin-top:auto;display:inline-flex}.svc-grid{grid-template-columns:repeat(auto-fill,minmax(min(360px,100%),1fr));gap:28px;margin-top:40px;display:grid}@media (width<=1023px){.split{grid-template-columns:1fr;gap:40px}.steps{grid-template-columns:1fr 1fr}.steps li:nth-child(2){border-right:0}.steps li:nth-child(-n+2){border-bottom:var(--b)}}@media (width<=767px){.incl-grid,.steps{grid-template-columns:1fr}.steps li{border-right:0;border-bottom:var(--b)}.steps li:last-child{border-bottom:0}}.proj .cats .status-tag,.status-tag{background:var(--lime);color:var(--on-lime);border:1px solid var(--ink);font:700 12px/1 var(--font-mono);padding:4px 6px;display:inline-block}
