@font-face{font-family:Literata;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/literata-vietnamese-400.woff2)format("woff2");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:Literata;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/literata-latin-ext-400.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Literata;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/literata-latin-400.woff2)format("woff2");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:Literata;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/literata-vietnamese-600.woff2)format("woff2");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:Literata;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/literata-latin-ext-600.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Literata;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/literata-latin-600.woff2)format("woff2");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-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-vietnamese-400.woff2)format("woff2");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:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-latin-ext-400.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-latin-400.woff2)format("woff2");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-weight:500;font-display:swap;src:url(/fonts/jetbrains-mono-vietnamese-500.woff2)format("woff2");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:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/jetbrains-mono-latin-ext-500.woff2)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/jetbrains-mono-latin-500.woff2)format("woff2");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{--forest:#232b23;--ink:#212a21;--text:#3d453b;--muted:#57614f;--oatmeal:#f4f0e6;--paper:#fbf9f3;--sand:#e9e2d3;--sage:#6d8161;--sage-strong:#46583c;--terracotta:#b0563a;--line:#212a211f;--serif:"Literata", "Iowan Old Style", "Palatino Linotype", Georgia, serif;--mono:"JetBrains Mono", "SFMono-Regular", "Cascadia Code", "Roboto Mono", "Liberation Mono", monospace;--shadow:0 18px 40px -28px #212a2173}*{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--oatmeal)}body{color:var(--text);background:var(--oatmeal);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;margin:0;font-family:ui-sans-serif,system-ui,sans-serif;line-height:1.65}@media (prefers-color-scheme:dark){:root{--forest:#d7e2d0;--ink:#f1f3ed;--text:#d2d9d0;--muted:#b4beb2;--oatmeal:#172019;--paper:#202b24;--sand:#243128;--sage:#9db58f;--sage-strong:#c2d7b7;--terracotta:#e28a68;--line:#d6e4cf2e;--shadow:0 18px 40px -28px #000000a6}body{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}body:before{z-index:-1;opacity:.35;pointer-events:none;content:"";background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23grain)' opacity='.06'/%3E%3C/svg%3E");position:fixed;inset:0}a{color:var(--sage-strong);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{color:var(--terracotta)}:focus-visible{outline:2px solid var(--terracotta);outline-offset:3px}.reveal{opacity:0;transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1);transition-delay:var(--reveal-delay,0s);transform:translateY(20px)}.reveal.is-visible{opacity:1;transform:translateY(0)}h1,h2,h3{color:var(--ink);font-family:var(--serif);letter-spacing:0;font-weight:600;line-height:1.16}p{margin:0 0 1.2rem}.site-shell{grid-template-columns:minmax(0,19rem) minmax(0,1fr);gap:clamp(2rem,6vw,5rem);width:min(100% - 2rem,68rem);margin:0 auto;padding:2rem 0 5rem;display:grid}.sidebar{border:1px solid var(--line);background:var(--sand);box-shadow:var(--shadow);border-radius:1.35rem;flex-direction:column;align-self:start;gap:2rem;padding:2rem;display:flex;position:sticky;top:2rem}.sidebar-top{justify-content:space-between;align-items:flex-start;gap:.75rem;display:flex}.portrait-frame{aspect-ratio:1;border:4px solid var(--paper);width:min(100%,11rem);box-shadow:var(--shadow);border-radius:52% 48% 44% 56%/46% 50% 50% 54%;margin:0 0 1.2rem;overflow:hidden;transform:rotate(-2deg)}.portrait-frame img{object-fit:cover;width:100%;height:100%;display:block;transform:rotate(2deg)scale(1.04)}.lang-switcher{border:1px solid var(--line);background:color-mix(in srgb, var(--paper) 70%, transparent);border-radius:999px;align-items:center;gap:.2rem;padding:.2rem .4rem;display:inline-flex;box-shadow:0 4px 12px -6px #212a2133}.lang-btn{color:var(--muted);cursor:pointer;font-family:var(--mono);background:0 0;border:none;border-radius:999px;padding:.2rem .45rem;font-size:.72rem;font-weight:500;transition:color .18s,background .18s}.lang-btn:hover{color:var(--ink)}.lang-btn.is-active{color:var(--paper);background:var(--forest);font-weight:700}.lang-divider{color:var(--line);-webkit-user-select:none;user-select:none;font-size:.68rem}.eyebrow,.project-status,.sidebar-note span,.skill-lines span{color:var(--sage-strong);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;font-size:.68rem}.eyebrow{margin-bottom:.6rem}.sidebar-name{margin:0 0 .8rem;font-size:2rem}.sidebar-note{margin-bottom:.65rem;font-size:.93rem}.sidebar-note span,.skill-lines span{margin-bottom:.15rem;display:block}.sidebar-nav{border-top:1px solid var(--line);gap:.35rem;padding-top:1.2rem;display:grid}.sidebar-nav a{font-family:var(--mono);text-transform:uppercase;border-left:2px solid #0000;padding:.45rem .6rem;font-size:.76rem;text-decoration:none}.sidebar-nav a:hover,.sidebar-nav a:focus-visible{border-left-color:var(--sage);background:#6d816124}.language-note{border-top:1px solid var(--line);padding-top:1.2rem}.language-note strong{color:var(--ink);font-family:var(--serif);margin-bottom:.45rem;font-size:1.2rem;display:block}.language-note p:last-child{margin-bottom:0;font-size:.9rem}.skip-link{z-index:10;color:var(--paper);background:var(--forest);padding:.6rem 1rem;position:fixed;top:1rem;left:1rem;transform:translateY(-200%)}.skip-link:focus{transform:none}.main-content{min-width:0}.hero{flex-direction:column;justify-content:center;min-height:min(44rem,78vh);padding:2rem 0 4rem;display:flex}.hero h2{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;max-width:12ch;margin-bottom:1.4rem;font-size:clamp(2.4rem,5.2vw,4.2rem)}.hero-copy{max-width:39rem;font-size:1.15rem}.hero-actions{flex-wrap:wrap;gap:.75rem;margin-top:1rem;display:flex}.button{border:1px solid var(--sage-strong);min-height:2.9rem;font-family:var(--mono);border-radius:.45rem;align-items:center;gap:.65rem;padding:.7rem 1rem;font-size:.75rem;text-decoration:none;display:inline-flex}.button-primary{color:var(--paper);background:var(--forest)}.button-primary:hover{color:var(--paper);background:var(--terracotta);border-color:var(--terracotta)}.button-secondary{color:var(--ink);background:0 0}.content-section,.contact-section,.education-page{border-top:1px solid var(--line);padding:4rem 0}.section-heading{grid-template-columns:minmax(9rem,.7fr) minmax(0,1.3fr);align-items:start;gap:1rem;margin-bottom:2rem;display:grid}.section-heading h2,.page-intro h2,.contact-section h2{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;margin:0;font-size:clamp(2rem,4vw,3.6rem)}.projects-list{gap:1rem;display:grid}.project-card{border:1px solid var(--line);background:color-mix(in srgb, var(--paper) 78%, transparent);box-shadow:var(--shadow);border-radius:.85rem;padding:1.5rem;transition:transform .26s,box-shadow .26s}.project-card:hover{transform:translateY(-4px);box-shadow:0 24px 48px -26px #212a2166}.project-heading{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.project-heading h3{margin:.2rem 0 1rem;font-size:2rem}.project-links{flex-wrap:wrap;align-items:baseline;gap:.85rem;display:flex}.project-links a,.project-heading a{font-family:var(--mono);flex:none;font-size:.73rem}.project-status{margin:0}.project-preview-container{margin:1.1rem 0 1.25rem}.preview-nav-tabs{flex-wrap:wrap;gap:.4rem;margin-bottom:.6rem;display:flex}.preview-tab-btn{background:color-mix(in srgb, var(--paper) 70%, transparent);border:1px solid var(--line);color:var(--muted);font-family:var(--mono);cursor:pointer;border-radius:999px;padding:.25rem .65rem;font-size:.68rem;font-weight:500;transition:color .18s,background .18s,border-color .18s}.preview-tab-btn:hover{color:var(--ink);border-color:var(--sage)}.preview-tab-btn.is-active{background:var(--forest);color:var(--paper);border-color:var(--forest);font-weight:600;box-shadow:0 4px 12px -4px #212a2140}.project-preview-frame{border:1px solid var(--line);box-shadow:var(--shadow);background:var(--paper);border-radius:.65rem;overflow:hidden}.project-preview-frame img{object-fit:cover;width:100%;height:auto;display:block}.preview-caption{color:var(--muted);align-items:baseline;gap:.45rem;margin:.6rem 0 0;font-size:.83rem;line-height:1.5;display:flex}.caption-dot{background:var(--sage);border-radius:50%;flex-shrink:0;width:6px;height:6px;display:inline-block}.project-summary{color:var(--ink);font-size:1.08rem}.project-details{max-width:42rem;color:var(--muted)}.project-note{border-left:2px solid var(--sage);max-width:42rem;color:var(--muted);margin-top:.6rem;margin-bottom:1rem;padding-left:.75rem;font-size:.85rem}.project-demo-slot{border:1px dashed var(--line);background:color-mix(in srgb, var(--sand) 40%, transparent);border-radius:.65rem;flex-direction:column;gap:.35rem;margin:1rem 0 1.2rem;padding:.85rem 1rem;display:flex}.demo-slot-tag{color:var(--sage-strong);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;font-size:.68rem;font-weight:600}.demo-slot-text{color:var(--muted);margin:0;font-size:.88rem}.project-blocks{border-top:1px solid var(--line);border-bottom:1px solid var(--line);gap:.95rem;margin:1.2rem 0;padding:1rem 0;display:grid}.project-block-title{color:var(--sage-strong);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;margin-bottom:.25rem;font-size:.68rem;font-weight:600;display:block}.project-block-desc{color:var(--text);margin:0;font-size:.95rem;line-height:1.6}.stack-list{flex-wrap:wrap;gap:.45rem;margin:1.4rem 0 0;padding:0;list-style:none;display:flex}.stack-list li{color:var(--sage-strong);font-family:var(--mono);background:#6d816129;border-radius:999px;padding:.35rem .55rem;font-size:.68rem}.skills-section{grid-template-columns:minmax(9rem,.7fr) minmax(0,1.3fr);gap:1rem;display:grid}.skills-section .section-heading{margin:0;display:block}.skill-lines{padding-top:.3rem}.skill-lines p{border-bottom:1px solid var(--line);padding-bottom:1rem}.credential-section{grid-template-columns:minmax(9rem,.7fr) minmax(0,1.3fr);gap:1rem;display:grid}.credential-section .section-heading{margin:0;display:block}.credential-link{color:var(--muted);align-self:center;margin:0;padding:1rem 0;font-size:.95rem}.about-section{grid-template-columns:minmax(12rem,.85fr) minmax(0,1.15fr);gap:clamp(1.5rem,4vw,3rem);display:grid}.about-section .section-heading{min-width:0;margin:0;display:block}.about-section .section-heading h2{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;max-width:12ch;font-size:clamp(2rem,3.2vw,3.1rem)}.about-copy{max-width:42rem}.about-copy p:last-child{margin-bottom:0}.contact-section{padding-bottom:1rem}.contact-section h2{max-width:11ch;margin-bottom:1.2rem}.contact-section p:not(.eyebrow){max-width:32rem}.services-intro,.workflow-intro{max-width:42rem;margin-bottom:2rem;font-size:1.05rem}.services-grid,.workflow-grid{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1rem;margin-bottom:2rem;display:grid}.service-card,.workflow-card{border:1px solid var(--line);background:color-mix(in srgb, var(--paper) 78%, transparent);box-shadow:var(--shadow);border-radius:.85rem;flex-direction:column;padding:1.5rem;transition:transform .26s,box-shadow .26s;display:flex}.service-card:hover,.workflow-card:hover{transform:translateY(-4px);box-shadow:0 24px 48px -26px #212a2166}.service-header{flex-direction:column;align-items:flex-start;gap:.55rem;margin-bottom:.8rem;display:flex}.turnaround-badge{color:var(--terracotta);font-family:var(--mono);background:#b0563a1f;border:1px solid #b0563a47;border-radius:.55rem;padding:.35rem .6rem;font-size:.66rem;font-weight:600;line-height:1.45}.workflow-step-num{aspect-ratio:1;border:1px solid var(--sage);width:2.2rem;color:var(--paper);background:var(--forest);font-family:var(--mono);border-radius:50%;place-items:center;margin-bottom:1rem;font-size:.72rem;font-weight:600;display:grid}.service-card h3,.workflow-card h3{margin:0 0 .75rem;font-size:1.4rem}.service-card p,.workflow-card p{color:var(--muted);margin:0;font-size:.95rem;line-height:1.55}.services-cta{margin-top:.5rem}.page-intro{max-width:42rem;margin-bottom:3rem}.page-intro p:last-child{font-size:1.1rem}.education-timeline{gap:1rem;margin-bottom:2rem;display:grid;position:relative}.education-timeline:before{content:"";background:var(--sage);opacity:.45;width:1px;position:absolute;top:1rem;bottom:1rem;left:1.25rem}.education-item{grid-template-columns:2.5rem minmax(0,1fr);align-items:start;gap:1rem;padding:1.2rem 0;display:grid;position:relative}.education-item.is-priority{border:1px solid var(--line);background:color-mix(in srgb, var(--paper) 80%, transparent);box-shadow:var(--shadow);border-radius:.85rem;padding:1.4rem}.education-number{aspect-ratio:1;border:1px solid var(--sage);width:2.5rem;color:var(--paper);background:var(--forest);font-family:var(--mono);border-radius:50%;place-items:center;font-size:.7rem;display:grid}.education-content{min-width:0}.education-item h3{margin:.2rem 0 .4rem;font-size:1.7rem}.education-level{color:var(--ink);margin:0 0 .25rem;font-size:.98rem;font-weight:500}.education-dates{font-family:var(--mono);margin:.35rem 0 0;font-size:.72rem;color:var(--sage-strong)!important}.education-detail-block{border-top:1px dashed var(--line);margin-top:.75rem;padding-top:.65rem}.education-detail-label{color:var(--sage-strong);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;margin-bottom:.2rem;font-size:.68rem;display:block}.education-detail-text{color:var(--muted);margin:0;font-size:.9rem;line-height:1.55}.text-link{font-family:var(--mono);font-size:.75rem}.site-footer{border-top:1px solid var(--line);color:var(--muted);font-family:var(--mono);justify-content:space-between;align-items:baseline;gap:1rem;padding:2rem 0 0;font-size:.7rem;display:flex}.site-footer p{margin:0}.site-footer nav{flex-wrap:wrap;gap:1rem;display:flex}.site-footer a{color:var(--muted)}.footer-machine-links{color:var(--muted);opacity:.85;font-size:.65rem;margin-top:.4rem!important}.footer-machine-links a{color:var(--muted);text-underline-offset:2px;text-decoration:underline}.footer-machine-links a:hover{color:var(--ink)}@media (width<=60rem){.site-shell{grid-template-columns:1fr;width:min(100% - 2rem,52rem)}.sidebar{position:static}.portrait-frame{width:8rem}.hero{min-height:auto;padding-top:3rem}}@media (width>=60.001rem) and (height<=55rem){.sidebar{gap:1.1rem;padding:1.25rem}.portrait-frame{width:7.5rem;margin-bottom:.8rem}.sidebar-name{margin-bottom:.5rem;font-size:1.65rem}.sidebar-note{margin-bottom:.4rem}.sidebar-nav{gap:.15rem;padding-top:.7rem}.sidebar-nav a{padding:.35rem .6rem}.language-note{padding-top:.7rem}.language-note strong{font-size:1.05rem}}@media (width<=38rem){.site-shell{width:min(100% - 1.25rem,34rem);padding-top:.65rem}.sidebar{padding:1.25rem}.hero h2{font-size:clamp(2.2rem,11vw,3rem)}.section-heading,.skills-section,.credential-section,.about-section{display:block}.section-heading h2,.skills-section .section-heading,.credential-section .section-heading,.about-section .section-heading{margin-bottom:1.5rem}.project-heading{display:block}.project-links{margin-bottom:1rem}.project-heading a{margin-bottom:.5rem;display:inline-block}.button{justify-content:space-between;width:100%}.site-footer{display:block}.site-footer nav{margin-top:.75rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}.reveal,.reveal.is-visible{opacity:1;transition:none;transform:none}}
