@import url("https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,500;1,500;1,600&display=swap");:root{--ink:#17201d;--muted:#77817c;--line:#dfe5e1;--paper:#f5f7f4;--cream:#e9efea;--orange:#159f91;--blue:#9bb8d8;--purple:#b5a7ca}*{box-sizing:border-box;scrollbar-width:none;-ms-overflow-style:none}::-webkit-scrollbar{display:none;width:0;height:0}body,html{scrollbar-width:none;-ms-overflow-style:none}body::-webkit-scrollbar,html::-webkit-scrollbar{display:none;width:0;height:0}body{padding-bottom:calc(76px + env(safe-area-inset-bottom))}html{scroll-behavior:auto}body{margin:0;background:var(--paper);color:var(--ink);font-family:DM Sans,sans-serif;-webkit-font-smoothing:antialiased;transition:background .25s ease,color .25s ease}body,button,input,select,textarea{font-size:16px}html[data-theme=dark] body{background:#111715}html[data-theme=dark] .site-shell{--ink:#edf4ef;--muted:#a4b2aa;--line:#34423a;--paper:#111715;--cream:#1b2520;--orange:#62d6c5;--blue:#9ebbdc;--purple:#bcaed0}a{color:inherit;text-decoration:none}button{font:inherit}.site-shell{max-width:1440px;min-height:100vh;margin:0 auto;padding:0 48px;background:var(--paper);color:var(--ink);transition:background .25s ease,color .25s ease}.topbar{height:98px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:relative}.wordmark{font-size:24px;font-weight:700;letter-spacing:-.08em}.wordmark i{color:var(--orange);font-style:normal}.nav-links{display:flex;gap:34px;color:var(--muted);font:400 11px DM Mono,monospace;text-transform:uppercase;letter-spacing:.08em}.nav-links a{transition:color .2s ease}.nav-links a:hover,.social-row a:hover,.text-link:hover{color:var(--orange)}.topbar-actions{display:flex;align-items:center;gap:18px}.command-trigger{display:inline-flex;align-items:center;gap:7px;border:0;background:transparent;color:var(--muted);cursor:pointer;padding:4px 0;transition:color .2s ease}.command-trigger:hover{color:var(--ink)}.command-trigger kbd{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--line);border-radius:4px;padding:3px 5px;color:inherit;font:400 9px DM Mono,monospace;white-space:nowrap}.language-switch{display:flex;align-items:center;gap:6px;color:var(--muted);font:400 10px DM Mono,monospace}.language-switch button,.theme-toggle{color:var(--muted);border:0;background:transparent;cursor:pointer;padding:3px;transition:color .2s ease,transform .2s ease}.language-switch button{font:inherit}.language-switch button.selected,.language-switch button:hover,.theme-toggle:hover{color:var(--ink)}.theme-toggle{display:grid;place-items:center;font-size:17px;line-height:1}.theme-toggle:hover{transform:rotate(18deg)}.menu-toggle svg,.theme-toggle svg{display:block}.menu-toggle{display:none;background:none;border:0;padding:8px 0}.menu-toggle span{display:block;width:24px;height:1px;margin:5px 0;background:var(--ink)}.tech-marquee{position:relative;overflow:hidden;margin:0 -48px;border-bottom:1px solid var(--line);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}.tech-marquee-track{display:flex;width:max-content;animation:tech-marquee-scroll 34s linear infinite}.tech-marquee-group{display:grid;grid-auto-flow:column;grid-auto-columns:160px;flex-shrink:0;align-items:center;grid-gap:0;gap:0;padding:15px 0}.tech-marquee-item{display:inline-flex;align-items:center;justify-content:center;gap:9px;color:var(--muted);white-space:nowrap;font:400 11px DM Mono,monospace;letter-spacing:.04em;text-transform:uppercase}.tech-marquee-item img{display:block;width:22px;height:22px;object-fit:contain;filter:none;opacity:.92;transition:opacity .25s ease,transform .25s ease}.tech-marquee-item:hover img{opacity:1;transform:scale(1.08)}.tech-marquee:hover .tech-marquee-track{animation-play-state:paused}html:not([data-theme=dark]) .tech-marquee-item img[src*="/nextjs/"],html:not([data-theme=dark]) .tech-marquee-item img[src*="/php/"],html[data-theme=dark] .tech-marquee-item img[src*="/github/"]{filter:invert(1)}@keyframes tech-marquee-scroll{to{transform:translateX(-50%)}}.bottom-nav{position:fixed;inset:auto 0 0;z-index:18;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));min-height:68px;padding:8px max(16px,env(safe-area-inset-left)) calc(8px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-right));border-top:1px solid var(--line);background:color-mix(in srgb,var(--paper) 94%,transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.bottom-nav a{position:relative;display:flex;min-width:0;flex-direction:column;align-items:center;justify-content:center;gap:4px;color:var(--muted);font:400 11px DM Mono,monospace;text-decoration:none}.bottom-nav a.is-active{color:var(--orange)}.bottom-nav-icon{position:relative;display:inline-flex}.bottom-nav-icon b{position:absolute;top:-3px;right:-12px;display:grid;min-width:16px;height:16px;place-items:center;padding:0 4px;border:2px solid var(--paper);border-radius:99px;background:var(--orange);color:var(--paper);font:500 9px DM Mono,monospace;line-height:1}.bottom-nav a:focus-visible{outline:2px solid var(--orange);outline-offset:4px;border-radius:6px}html[data-theme=dark] .bottom-nav{--paper:#111715;--line:#34423a;--muted:#a4b2aa;--orange:#62d6c5;background:color-mix(in srgb,#111715 94%,transparent)}.accessibility-panel{position:fixed;top:112px;right:max(28px,calc((100vw - 1440px) / 2 + 48px));z-index:15;display:flex;flex-direction:column;gap:4px;width:min(280px,calc(100vw - 40px));padding:14px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);box-shadow:0 16px 40px rgba(0,0,0,.2)}.accessibility-panel strong{display:flex;align-items:center;gap:8px;padding:4px 6px 10px;font-size:13px}.accessibility-panel button{display:flex;align-items:center;justify-content:space-between;border:0;border-radius:6px;padding:10px 8px;background:transparent;color:var(--muted);cursor:pointer;font-size:13px;text-align:left}.accessibility-panel button.is-active,.accessibility-panel button:hover{background:color-mix(in srgb,var(--orange) 14%,transparent);color:var(--ink)}.accessibility-panel button span{color:var(--orange);font:400 9px DM Mono,monospace}html[data-theme=dark] .accessibility-panel{--ink:#edf4ef;--muted:#a4b2aa;--line:#34423a;--paper:#111715;--orange:#62d6c5}.terminal-overlay{position:fixed;inset:0;z-index:25;display:grid;place-items:center;padding:20px;background:rgba(9,13,11,.62);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.terminal-window{width:min(100%,700px);overflow:hidden;border:1px solid var(--line);border-radius:12px;background:#101513;color:#d8e4dd;box-shadow:0 24px 70px rgba(0,0,0,.35);font:400 13px DM Mono,monospace}.terminal-window header{display:flex;align-items:center;justify-content:space-between;padding:12px 15px;border-bottom:1px solid #2c3932;color:#a9b8af}.terminal-window header span{display:flex;align-items:center;gap:8px}.terminal-window header svg{color:#62d6c5}.terminal-window header button{display:grid;place-items:center;border:0;background:transparent;color:#a9b8af;cursor:pointer}.terminal-window header button:hover{color:#fff}.terminal-output{min-height:260px;max-height:52vh;overflow-y:auto;padding:18px}.terminal-output p{margin:0 0 18px;color:#8faaa0;line-height:1.7;white-space:pre-wrap}.terminal-output pre{margin:0 0 10px;color:#d8e4dd;font:inherit;line-height:1.7;white-space:pre-wrap;overflow-wrap:anywhere}.terminal-form{display:flex;align-items:center;gap:9px;padding:13px 18px;border-top:1px solid #2c3932;color:#62d6c5}.terminal-form input{min-width:0;flex:1 1;border:0;outline:0;background:transparent;color:#fff;font:inherit}.terminal-form input::placeholder{color:#607068}.command-overlay{position:fixed;inset:0;z-index:20;display:grid;place-items:start center;padding:16vh 20px 30px;background:rgba(9,13,11,.5);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.command-palette{width:min(100%,560px);overflow:hidden;border:1px solid var(--line);border-radius:14px;background:var(--paper);color:var(--ink);box-shadow:0 24px 70px rgba(0,0,0,.28)}.command-search{display:flex;align-items:center;gap:11px;padding:16px 18px;border-bottom:1px solid var(--line);color:var(--muted)}.command-search input{min-width:0;flex:1 1;border:0;outline:0;background:transparent;color:var(--ink);font:400 16px DM Sans,sans-serif}.command-search input::placeholder{color:var(--muted)}.command-footer kbd,.command-search kbd{display:inline-flex;align-items:center;gap:2px;border:1px solid var(--line);border-radius:4px;padding:3px 5px;color:var(--muted);font:400 9px DM Mono,monospace}.command-list{max-height:360px;overflow-y:auto;padding:8px}.command-item{width:100%;display:grid;grid-template-columns:34px minmax(0,1fr) 20px;align-items:center;grid-gap:11px;gap:11px;border:0;border-radius:9px;padding:11px 10px;background:transparent;color:var(--ink);text-align:left;cursor:pointer}.command-item:focus-visible,.command-item:hover{outline:0;background:color-mix(in srgb,var(--ink) 7%,transparent)}.command-icon{display:grid;place-items:center;width:30px;height:30px;border-radius:7px;background:color-mix(in srgb,var(--orange) 20%,transparent);color:var(--orange)}.command-item small,.command-item strong{display:block}.command-item strong{font-size:13px}.command-item small{margin-top:3px;color:var(--muted);font-size:11px}.command-empty,.command-item>.arrow{color:var(--muted)}.command-empty{margin:18px 10px;font-size:13px}.command-footer{display:flex;gap:16px;flex-wrap:wrap;padding:11px 18px;border-top:1px solid var(--line);color:var(--muted);font:400 9px DM Mono,monospace;text-transform:uppercase}.command-footer kbd{margin-right:3px}.layout-grid{display:grid;grid-template-columns:minmax(300px,34%) 1fr}.profile-panel{min-height:calc(100vh - 98px);padding:74px 65px 40px 0;display:flex;flex-direction:column;justify-content:space-between;border-right:1px solid var(--line);position:-webkit-sticky;position:sticky;top:0;align-self:start}.avatar-wrap{width:74px;height:74px;border-radius:50%;padding:4px;background:var(--ink);position:relative;margin-bottom:45px}.avatar-wrap img{width:100%;height:100%;object-fit:cover;border-radius:inherit;filter:saturate(.75)}.online-dot{position:absolute;right:0;bottom:4px;width:13px;height:13px;border-radius:50%;background:#78b696;border:3px solid var(--paper)}.availability,.expertise-index,.eyebrow,.project-count,.project-number,.section-label,footer{font:400 10px DM Mono,monospace;letter-spacing:.08em;text-transform:uppercase}.eyebrow{color:var(--muted);margin:0 0 10px}h1{font-size:clamp(62px,7vw,100px);line-height:1.02;letter-spacing:-.085em;margin:0 0 30px;font-weight:600}.contact-content em,h1 em{display:inline-block;font-family:Playfair Display,serif;font-weight:500;letter-spacing:-.06em;line-height:1.2;padding-top:.1em}html[lang=vi] h1{line-height:1.18}html[lang=vi] h1 em{line-height:1.3;padding-top:.16em}.role{color:var(--muted);max-width:230px;font-size:14px;line-height:1.55;margin:0 0 32px}.profile-actions{display:flex;flex-direction:column;align-items:flex-start;gap:17px}.primary-link,.text-link{gap:10px;font-size:13px;font-weight:600;line-height:1.35;border-bottom:1px solid var(--ink);padding-bottom:12px;width:-moz-fit-content;width:fit-content}.cv-link,.primary-link,.text-link{display:inline-flex;align-items:center}.cv-link{gap:8px;color:var(--muted);font:400 10px DM Mono,monospace;text-transform:uppercase;transition:color .2s ease}.cv-link:hover{color:var(--orange)}.arrow{display:inline-block;vertical-align:middle;line-height:1;font-weight:400}.profile-bottom{display:flex;flex-direction:column;gap:28px}.availability{color:var(--muted);margin:0}.network-status{display:inline-flex;align-items:center;gap:7px;width:-moz-fit-content;width:fit-content;color:var(--muted);font:400 10px DM Mono,monospace;text-transform:uppercase;letter-spacing:.06em}.network-status svg{color:#70ac8c}.network-status.offline,.network-status.offline svg{color:var(--orange)}.availability span{display:inline-block;width:6px;height:6px;background:#70ac8c;border-radius:50%;margin:0 7px 1px 0}.social-row{display:flex;gap:18px;color:var(--muted);font:400 10px DM Mono,monospace;text-transform:uppercase}.copy-info-row{display:flex;flex-wrap:wrap;gap:7px;margin-top:-12px}.copy-info-row button{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:999px;padding:6px 9px;background:transparent;color:var(--muted);cursor:pointer;font:400 10px DM Mono,monospace;transition:color .2s ease,border-color .2s ease,background .2s ease}.copy-info-row button:focus-visible,.copy-info-row button:hover{border-color:var(--orange);background:color-mix(in srgb,var(--orange) 10%,transparent);color:var(--ink)}.copy-info-row button svg{flex:0 0 auto}.social-row a{transition:color .2s ease}.qr-trigger{display:inline-flex;align-items:center;gap:7px;width:-moz-fit-content;width:fit-content;border:0;border-bottom:1px solid var(--line);padding:0 0 8px;background:transparent;color:var(--muted);cursor:pointer;font:400 10px DM Mono,monospace;text-transform:uppercase;transition:color .2s ease,border-color .2s ease}.qr-trigger:hover{color:var(--orange);border-color:var(--orange)}.qr-overlay{position:fixed;inset:0;z-index:30;display:grid;place-items:center;padding:20px;background:rgba(9,13,11,.62);-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}.qr-modal{position:relative;display:flex;flex-direction:column;align-items:center;gap:14px;width:min(100%,330px);padding:40px 28px 36px;border:1px solid var(--line);border-radius:14px;background:var(--paper);color:var(--ink);box-shadow:0 24px 70px rgba(0,0,0,.28);text-align:center}.qr-modal img{display:block;width:240px;height:240px;border-radius:8px;background:#fff}.qr-modal strong{margin-top:4px;font-size:15px}.qr-modal span{color:var(--muted);font-size:12px}.qr-close{position:absolute;top:16px;right:16px;display:grid;place-items:center;border:0;background:transparent;color:var(--muted);cursor:pointer}.qr-close:hover{color:var(--ink)}.profile-tools{display:flex;flex-wrap:wrap;gap:16px}.local-time{display:flex;align-items:center;gap:8px;color:var(--muted)}.local-time>svg{color:var(--orange)}.local-time span{display:flex;flex-direction:column;gap:2px}.local-time strong{color:var(--ink);font:500 14px DM Mono,monospace;letter-spacing:.02em}.contact-hours,.local-time small{color:var(--muted);font:400 9px DM Mono,monospace;letter-spacing:.04em;text-transform:uppercase}.contact-hours{margin:-8px 0 0 22px}.install-trigger{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;padding:7px 10px;background:color-mix(in srgb,var(--paper) 70%,transparent);color:var(--ink);cursor:pointer;font:400 10px DM Mono,monospace;text-transform:uppercase}.install-trigger:hover{border-color:var(--orange);color:var(--orange)}.install-overlay{position:fixed;inset:0;z-index:32;display:grid;place-items:center;padding:20px;background:rgba(9,13,11,.62);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.install-modal{position:relative;width:min(100%,390px);padding:30px;border:1px solid var(--line);border-radius:18px;background:var(--paper);color:var(--ink);box-shadow:0 24px 70px rgba(0,0,0,.28)}.install-modal>svg{color:var(--orange)}.install-modal h2{margin:18px 0 10px;font-size:22px;line-height:1.2}.install-modal p{margin:0;color:var(--muted);line-height:1.6}.content-panel{min-width:0;padding-left:65px}.contact-section,.experience-section,.intro-section,.work-section{padding:80px 0;border-bottom:1px solid var(--line)}.section-label{display:flex;gap:20px;color:var(--muted)}.section-label span:first-child{color:var(--orange)}.intro-body{max-width:700px;margin:62px 0 0 17%}.intro-lead{font-size:clamp(32px,4vw,58px);line-height:1.24;letter-spacing:-.065em;margin:0 0 34px;padding-top:.16em;max-width:650px}.intro-lead span{display:inline-block;font-family:Playfair Display,serif;font-style:italic;font-weight:500;line-height:1.22;padding-top:.1em}.intro-lead br{display:block;content:"";margin-bottom:.5em}.intro-detail{color:var(--muted);max-width:390px;margin:0 0 28px;line-height:1.65;font-size:14px}.section-heading{display:flex;justify-content:space-between;align-items:center}.project-count{color:var(--muted)}.projects-list{margin-top:48px}.project-row{width:100%;display:grid;grid-template-columns:45px minmax(0,1fr) auto 42px;align-items:center;grid-gap:22px;gap:22px;text-align:left;cursor:pointer;background:none;border:0;border-top:1px solid var(--line);padding:22px 0;color:var(--ink);transition:padding .25s ease,background .25s ease}.project-row:last-child{border-bottom:1px solid var(--line)}.project-row.active,.project-row:hover{padding-left:16px;padding-right:16px;background:rgba(255,255,255,.55)}html[data-theme=dark] .project-row.active,html[data-theme=dark] .project-row:hover{background:rgba(255,255,255,.07)}.project-number{color:var(--muted);align-self:start;padding-top:4px}.project-main{display:flex;flex-direction:column;gap:7px;min-width:0}.project-main strong{font-size:17px;letter-spacing:-.03em}.project-main small{color:var(--muted);font-size:12px;line-height:1.4;max-width:380px}.project-status{display:inline-flex;align-items:center;gap:6px;width:-moz-fit-content;width:fit-content;margin-top:2px;color:var(--muted);font:400 9px DM Mono,monospace;text-transform:uppercase;letter-spacing:.04em}.project-status i{width:6px;height:6px;border-radius:50%;background:var(--muted)}.project-status.online{color:#70ac8c}.project-status.online i{background:#70ac8c;box-shadow:0 0 0 3px color-mix(in srgb,#70ac8c 18%,transparent)}.project-status.offline{color:var(--orange)}.project-status.offline i{background:var(--orange)}.project-status.checking i{animation:status-pulse 1.1s ease-in-out infinite}@keyframes status-pulse{50%{opacity:.3;transform:scale(.7)}}.project-tags{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}.project-tags span{color:var(--muted);border:1px solid var(--line);padding:6px 8px;border-radius:99px;font:400 9px DM Mono,monospace}.project-detail-links{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-gap:8px;gap:8px;margin-top:14px}.project-detail-links a{display:flex;align-items:center;gap:10px;min-width:0;padding:12px 14px;border:1px solid var(--line);border-radius:8px;color:var(--muted);font:400 10px DM Mono,monospace;transition:border-color .2s ease,color .2s ease,background .2s ease}.project-detail-links a:hover{border-color:var(--orange);background:color-mix(in srgb,var(--orange) 8%,transparent);color:var(--ink)}.project-detail-links a span{color:var(--orange)}.project-detail-links a strong{overflow:hidden;flex:1 1;text-overflow:ellipsis;color:inherit;font:inherit;text-transform:uppercase}.project-detail-links a svg{flex:0 0 auto}.project-mark{width:38px;height:38px;display:grid;place-items:center;border-radius:50%;background:var(--orange)}.project-mark.blue{background:var(--blue)}.project-mark.green{background:#78b696}.project-mark.purple{background:var(--purple)}.project-preview{height:230px;margin-top:48px;border-radius:2px;position:relative;overflow:hidden;background:var(--orange);transition:background .3s ease}.project-preview.blue{background:var(--blue)}.project-preview.green{background:#78b696}.project-preview.purple{background:var(--purple)}.preview-orbit{position:absolute;width:400px;height:400px;border:1px solid rgba(23,32,29,.18);border-radius:50%;left:47%;top:35%;transform:translate(-50%,-50%)}.orbit-two{width:540px;height:540px;left:65%;top:80%}.preview-window{position:absolute;left:18%;top:42px;width:275px;height:155px;padding:15px;background:rgba(245,247,244,.82);border:1px solid rgba(23,32,29,.12);box-shadow:16px 19px 0 rgba(23,32,29,.12);transform:rotate(-3deg)}.window-dot{display:inline-block;width:5px;border-radius:50%;opacity:.5;margin-right:4px}.window-dot,.window-line{height:5px;background:var(--ink)}.window-line{width:70px;opacity:.14;margin-top:25px}.window-line.large{width:145px;height:12px;margin-top:28px;opacity:.75}.window-card{width:58px;height:35px;background:rgba(23,32,29,.1);position:absolute;right:15px;bottom:15px}.preview-caption{position:absolute;right:26px;bottom:24px;display:flex;flex-direction:column;align-items:flex-end;color:rgba(23,32,29,.65);font:400 10px DM Mono,monospace;text-transform:uppercase}.preview-caption strong{color:var(--ink);font:500 18px DM Sans,sans-serif;text-transform:none;letter-spacing:-.03em;margin-top:4px}.preview-caption a{display:inline-flex;align-items:center;gap:5px;color:var(--ink);border-bottom:1px solid rgba(23,32,29,.35);margin-top:10px;padding-bottom:3px;font:500 10px DM Mono,monospace;text-transform:uppercase}.preview-caption a .arrow{width:14px;height:14px}.preview-caption .share-link{margin-top:8px;opacity:.72}.preview-caption a.project-preview-title{margin-top:4px;padding:0;border-bottom:0;color:var(--ink);font:500 18px DM Sans,sans-serif;letter-spacing:-.03em;text-transform:none}.preview-caption button.share-link{display:inline-flex;align-items:center;gap:5px;border:0;border-bottom:1px solid rgba(23,32,29,.35);margin-top:8px;padding:0 0 3px;background:transparent;color:var(--ink);cursor:pointer;font:500 10px DM Mono,monospace;text-transform:uppercase;opacity:.72}.preview-caption button.share-link:hover{opacity:1}.project-share-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap;max-width:300px;margin-top:12px}.project-share-actions button{display:inline-flex;align-items:center;gap:4px;border:1px solid rgba(23,32,29,.3);border-radius:999px;padding:5px 8px;background:transparent;color:var(--ink);cursor:pointer;font:500 9px DM Mono,monospace;text-transform:uppercase}.project-share-actions button:hover{background:rgba(23,32,29,.1);border-color:var(--ink)}.experience-section{display:grid;grid-template-columns:25% 1fr;grid-gap:30px;gap:30px}.expertise-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:28px;gap:28px}.expertise-grid>div{border-left:1px solid var(--line);padding-left:17px}.expertise-index{color:var(--orange)}.expertise-grid strong{display:block;font-size:17px;line-height:1.3;letter-spacing:-.04em;margin:33px 0 18px}.expertise-grid p{color:var(--muted);font-size:12px;line-height:1.5;margin:0}.github-section{padding:80px 0;border-bottom:1px solid var(--line)}.section-subtitle{color:var(--muted);font-size:13px;margin:18px 0 0}.github-profile-link{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font:400 10px DM Mono,monospace;text-transform:uppercase;transition:color .2s ease}.github-profile-link:hover{color:var(--orange)}.repositories-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:12px;gap:12px;margin-top:42px}.repository-card{min-width:0;padding:20px;border:1px solid var(--line);border-radius:10px;color:var(--ink);transition:background .2s ease,border-color .2s ease,transform .2s ease}.repository-card:hover{background:color-mix(in srgb,var(--ink) 5%,transparent);border-color:var(--orange);transform:translateY(-2px)}.repository-top{display:flex;align-items:center;justify-content:space-between;gap:14px}.repository-top strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px}.repository-top svg{flex:0 0 auto;color:var(--muted)}.repository-card p{min-height:38px;margin:14px 0 20px;color:var(--muted);font-size:12px;line-height:1.55}.repository-meta{display:flex;align-items:center;gap:13px;color:var(--muted);font:400 9px DM Mono,monospace;text-transform:uppercase}.repository-meta span{display:inline-flex;align-items:center;gap:4px}.github-empty{color:var(--muted);font-size:13px}.contribution-summary{display:flex;align-items:baseline;gap:8px;margin-top:38px}.contribution-summary strong{font-size:30px;letter-spacing:-.06em}.contribution-summary span{color:var(--muted);font-size:12px}.contribution-chart{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,12px);grid-auto-columns:12px;grid-gap:4px;gap:4px;overflow-x:auto;margin-top:17px;padding-bottom:5px;scrollbar-width:none;-ms-overflow-style:none}.contribution-chart::-webkit-scrollbar{display:none;width:0;height:0}.contribution-cell,.contribution-legend i{display:block;width:12px;height:12px;border-radius:3px;background:color-mix(in srgb,var(--ink) 9%,transparent)}.contribution-cell:hover{outline:2px solid var(--orange);outline-offset:1px}.contribution-cell.level-1,.contribution-legend .level-1{background:color-mix(in srgb,var(--orange) 25%,var(--paper))}.contribution-cell.level-2,.contribution-legend .level-2{background:color-mix(in srgb,var(--orange) 45%,var(--paper))}.contribution-cell.level-3,.contribution-legend .level-3{background:color-mix(in srgb,var(--orange) 70%,var(--paper))}.contribution-cell.level-4,.contribution-legend .level-4{background:var(--orange)}.contribution-legend{display:flex;align-items:center;justify-content:flex-end;gap:5px;margin-top:10px;color:var(--muted);font:400 9px DM Mono,monospace;text-transform:uppercase}.contribution-legend span{margin:0 4px}.language-stats{max-width:560px;margin-top:34px}.language-stats-heading{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:16px}.language-stats-heading strong{font-size:15px}.language-stats-heading span{color:var(--muted);font:400 10px DM Mono,monospace;text-transform:uppercase}.language-bars{display:grid;grid-gap:12px;gap:12px}.language-bar-label{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:5px;color:var(--muted);font:400 11px DM Mono,monospace}.language-bar-label strong{color:var(--ink);font-weight:500}.language-bar-track{height:5px;overflow:hidden;border-radius:99px;background:color-mix(in srgb,var(--ink) 9%,transparent)}.language-bar-fill{display:block;height:100%;min-width:5px;border-radius:inherit;background:var(--orange)}.language-color-1{background:#6e9dff}.language-color-2{background:#c58cff}.language-color-3{background:#f0c36a}.language-color-4{background:#7bc8a4}.language-color-5{background:#e97e9f}.language-stats-empty{margin:0;color:var(--muted);font-size:12px;line-height:1.5}.contact-section{padding-bottom:94px}.contact-content{margin:60px 0 0 17%;display:flex;align-items:flex-end;justify-content:space-between;gap:30px}.contact-content p{margin:0;font-size:clamp(42px,6vw,80px);letter-spacing:-.075em;line-height:1.02}.contact-circle{min-width:142px;height:142px;border-radius:50%;background:var(--ink);color:var(--paper);display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;font-size:12px;gap:8px;transition:transform .25s ease,background .25s ease}.contact-circle:hover{transform:rotate(7deg);background:var(--orange);color:var(--ink)}html[lang=vi] .intro-lead{line-height:1.75}html[lang=vi] .contact-content p{line-height:1.36}.contact-form{position:relative;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:18px;gap:18px;margin:58px 0 0 17%;max-width:700px}.contact-form label{display:flex;flex-direction:column;gap:9px;color:var(--muted);font:400 10px DM Mono,monospace;letter-spacing:.08em;text-transform:uppercase}.contact-form input,.contact-form textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:13px 14px;background:transparent;color:var(--ink);font:400 16px DM Sans,sans-serif;letter-spacing:0;text-transform:none;outline:0;resize:vertical;transition:border-color .2s ease,background .2s ease}.contact-form input:focus,.contact-form textarea:focus{border-color:var(--orange);background:color-mix(in srgb,var(--ink) 3%,transparent)}.contact-form input::placeholder,.contact-form textarea::placeholder{color:var(--muted);opacity:.75}.contact-form-wide{grid-column:1/-1}.contact-form-footer{display:flex;align-items:center;gap:18px;flex-wrap:wrap;grid-column:1/-1}.contact-form-footer button{display:inline-flex;align-items:center;gap:10px;border:0;border-bottom:1px solid var(--ink);padding:0 0 11px;background:transparent;color:var(--ink);cursor:pointer;font-size:13px;font-weight:600}.contact-form-footer button:disabled{cursor:wait;opacity:.55}.contact-form-status{font-size:12px;line-height:1.5}.contact-form-status.success{color:#70ac8c}.contact-form-status.error{color:var(--orange)}.contact-honeypot{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important}footer{color:var(--muted);display:flex;justify-content:space-between;gap:20px;padding:24px 0 32px}.experience-section+.contact-section{border-bottom:0}@media (max-width:900px){.site-shell{padding:0 28px}.profile-panel{padding-right:40px}.content-panel{padding-left:40px}.project-tags{display:none}.experience-section{grid-template-columns:1fr;gap:40px}.contact-content{margin-left:0}}@media (max-width:640px){.site-shell{padding:0 20px}.topbar{height:76px}.nav-links{display:none;position:absolute;z-index:3;top:calc(100% + 10px);left:0;right:0;background:var(--paper);border:1px solid var(--line);border-radius:10px;box-shadow:0 14px 30px rgba(0,0,0,.12);padding:22px;flex-direction:column;gap:20px}.nav-links.is-open{display:flex}.menu-toggle{display:block}.command-trigger kbd{display:none}.topbar-actions{gap:13px}.layout-grid{display:block}.profile-panel{min-height:auto;padding:50px 0 42px;border-right:0;position:static}.profile-bottom{gap:24px;margin-top:28px}.content-panel{padding-left:0}.avatar-wrap{margin-bottom:30px}h1{font-size:75px}.contact-section,.experience-section,.github-section,.intro-section,.work-section{padding:56px 0}.intro-body{margin:45px 0 0}.intro-lead{font-size:38px}.project-row{grid-template-columns:32px minmax(0,1fr) 34px;gap:12px;padding:18px 0}.project-row.active,.project-row:hover{padding-left:10px;padding-right:10px}.project-main small{font-size:11px}.project-preview{margin-top:30px;height:260px}.preview-window{left:9%;top:36px;transform:rotate(-3deg) scale(.8);transform-origin:left top}.preview-caption{right:15px;bottom:15px}.preview-caption strong{font-size:14px}.project-share-actions{max-width:260px}.expertise-grid{gap:22px;grid-template-columns:1fr}.expertise-grid>div{display:grid;grid-template-columns:38px 1fr;grid-column-gap:14px;column-gap:14px}.expertise-grid strong{margin:0}.expertise-grid p{grid-column:2;margin-top:9px}.repositories-grid{grid-template-columns:1fr;margin-top:32px}.repository-card p{min-height:auto}.repository-meta{flex-wrap:wrap;line-height:1.7}.contact-content{margin-top:45px;align-items:flex-start;flex-direction:column}.contact-circle{min-width:118px;height:118px;align-self:flex-end;margin-top:-20px}footer{flex-wrap:wrap;line-height:1.5}}.project-detail-page{--detail-ink:#17201d;--detail-muted:#64716b;--detail-line:#d7e0db;--detail-paper:#f5f7f4;--detail-accent:var(--blue);min-height:100vh;padding:0 clamp(24px,7vw,120px);background:var(--detail-paper);color:var(--detail-ink)}.project-detail-page.green{--detail-accent:#78b696}.project-detail-page.purple{--detail-accent:var(--purple)}html[data-theme=dark] .project-detail-page{--detail-ink:#edf4ef;--detail-muted:#a4b2aa;--detail-line:#34423a;--detail-paper:#111715}.project-detail-header{display:flex;align-items:center;justify-content:space-between;max-width:1120px;height:88px;margin:0 auto;border-bottom:1px solid var(--detail-line);font:400 11px DM Mono,monospace;text-transform:uppercase;letter-spacing:.06em}.project-detail-back,.project-detail-language{display:inline-flex;align-items:center;gap:8px;color:var(--detail-muted);transition:color .2s ease}.project-detail-back:hover,.project-detail-language:hover{color:var(--detail-ink)}.project-detail-hero{max-width:1120px;margin:0 auto;padding:clamp(78px,12vw,150px) 0 92px}.project-detail-index{color:var(--detail-accent);font:400 11px DM Mono,monospace;letter-spacing:.12em;text-transform:uppercase}.project-detail-hero h1{max-width:820px;margin:24px 0 20px;font-size:clamp(58px,11vw,148px);line-height:.92;letter-spacing:-.08em}.project-detail-hero p{max-width:620px;margin:0;color:var(--detail-muted);font-size:clamp(18px,2.5vw,27px);line-height:1.45}.project-detail-actions{display:flex;align-items:center;gap:24px;flex-wrap:wrap;margin-top:38px}.project-detail-primary,.project-detail-secondary{display:inline-flex;align-items:center;gap:9px;padding-bottom:10px;border-bottom:1px solid;font-size:14px;font-weight:600;transition:color .2s ease,border-color .2s ease}.project-detail-primary{color:var(--detail-ink)}.project-detail-secondary{color:var(--detail-muted);font:400 11px DM Mono,monospace;text-transform:uppercase}.project-detail-primary:hover,.project-detail-secondary:hover{color:var(--detail-accent)}.project-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:16px;gap:16px;max-width:1120px;margin:0 auto;padding:28px 0 120px;border-top:1px solid var(--detail-line)}.project-detail-card{min-height:190px;padding:26px;border:1px solid var(--detail-line);border-radius:14px}.project-detail-card>svg{color:var(--detail-accent)}.project-detail-card>span{display:block;margin-top:30px;font:400 11px DM Mono,monospace;letter-spacing:.08em;text-transform:uppercase}.project-detail-card p{max-width:460px;margin:14px 0 0;color:var(--detail-muted);font-size:18px;line-height:1.55}.project-detail-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.project-detail-tags span{border:1px solid var(--detail-line);border-radius:999px;padding:7px 10px}.project-detail-footer,.project-detail-tags span{color:var(--detail-muted);font:400 11px DM Mono,monospace}.project-detail-footer{display:flex;align-items:center;justify-content:space-between;gap:20px;max-width:1120px;margin:0 auto;padding:24px 0 34px;border-top:1px solid var(--detail-line)}.project-detail-footer a{display:inline-flex;align-items:center;gap:8px;color:var(--detail-ink);transition:color .2s ease}.project-detail-footer a:hover{color:var(--detail-accent)}@media (max-width:640px){.project-detail-page{padding:0 20px}.project-detail-header{height:72px}.project-detail-hero{padding:72px 0 64px}.project-detail-hero h1{font-size:clamp(58px,20vw,92px)}.project-detail-hero p{font-size:18px}.project-detail-grid{grid-template-columns:1fr;padding-bottom:72px}.project-detail-card{min-height:0}.project-detail-footer{align-items:flex-start;flex-direction:column;line-height:1.6}.project-detail-links{grid-template-columns:1fr}#github .section-heading{align-items:flex-start;flex-direction:column;gap:22px}#github .section-subtitle{max-width:100%;line-height:1.6}#github .github-profile-link{align-self:flex-start}.contact-form{grid-template-columns:1fr;margin-left:0;margin-top:44px}.contact-form-footer,.contact-form-wide{grid-column:auto}.accessibility-panel{top:90px;right:20px}.install-trigger{padding:7px;border:0;background:transparent}.install-trigger span{display:none}.install-modal{padding:26px 20px;border-radius:16px}}@media (min-width:641px){.install-trigger{display:none}}@media (max-width:640px){.tech-marquee{margin:0 -20px}.tech-marquee-group{grid-auto-columns:140px;padding:13px 0}body{padding-bottom:calc(96px + env(safe-area-inset-bottom))}.bottom-nav{inset:auto 12px calc(12px + env(safe-area-inset-bottom));min-height:68px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--ink) 16%,transparent);border-radius:26px;background:color-mix(in srgb,var(--paper) 78%,transparent);box-shadow:0 12px 34px rgba(0,0,0,.2),inset 0 1px 0 rgba(255,255,255,.28)}.bottom-nav a{z-index:1;border-radius:18px;transition:none}.bottom-nav a.is-active{background:color-mix(in srgb,var(--orange) 16%,transparent)}}@media (min-width:641px){.bottom-nav{display:none}body{padding-bottom:0}}@media (prefers-reduced-motion:reduce){.tech-marquee-track{animation:none;transform:none}}html[data-a11y-motion=reduced] .tech-marquee-track{animation:none;transform:none}html[data-a11y-text=large] body{font-size:18px}html[data-a11y-text=large] .contact-form input,html[data-a11y-text=large] .contact-form textarea,html[data-a11y-text=large] .github-empty,html[data-a11y-text=large] .intro-detail,html[data-a11y-text=large] .project-main small,html[data-a11y-text=large] .repository-card p,html[data-a11y-text=large] .role,html[data-a11y-text=large] .section-subtitle{font-size:16px}html[data-a11y-contrast=high] .site-shell{--muted:#46534c;--line:#87968d;--orange:#087f72}html[data-theme=dark][data-a11y-contrast=high] .site-shell{--ink:#ffffff;--muted:#d3ded7;--line:#718178;--orange:#8ff3df}html[data-a11y-motion=reduced] *,html[data-a11y-motion=reduced] :after,html[data-a11y-motion=reduced] :before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}html[data-a11y-focus=strong] :focus-visible{outline:3px solid var(--orange)!important;outline-offset:4px!important}input,select,textarea{font-size:16px!important;-webkit-text-size-adjust:100%}.not-found-page{min-height:100vh;display:grid;place-items:center;padding:24px;background:#111715;color:#d8e4dd}.not-found-terminal{width:min(100%,680px);overflow:hidden;border:1px solid #34423a;border-radius:12px;background:#101513;box-shadow:0 24px 70px rgba(0,0,0,.35);font:400 16px DM Mono,monospace}.not-found-terminal header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #2c3932;color:#a9b8af}.not-found-terminal header span:first-child{display:flex;align-items:center;gap:8px}.not-found-status,.not-found-terminal header svg{color:#62d6c5}.not-found-body{padding:30px}.not-found-command{margin:0 0 16px;color:#8faaa0;line-height:1.7}.not-found-body h1{margin:0 0 10px;color:#62d6c5;font:600 clamp(72px,16vw,132px) DM Sans,sans-serif;letter-spacing:.04em;line-height:.9}.not-found-message{max-width:520px;margin:0 0 28px;color:#d8e4dd;line-height:1.7}.not-found-result{margin:-4px 0 30px;color:#62d6c5}.not-found-cursor{color:#78b696}.not-found-home{display:inline-flex;align-items:center;gap:8px;border-bottom:1px solid #62d6c5;padding-bottom:10px;color:#62d6c5;transition:color .2s ease,border-color .2s ease}.not-found-home:hover{border-color:#fff;color:#fff}.error-terminal-title{margin:0 0 12px;color:#d8e4dd;font-size:24px;line-height:1.3}.error-terminal-actions{display:flex;align-items:center;flex-wrap:wrap;gap:22px}.error-terminal-actions button.not-found-home{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;border-bottom:1px solid #62d6c5;padding:0 0 10px;background:transparent;color:#62d6c5;cursor:pointer;font:inherit}.error-terminal-actions button.not-found-home:hover{border-color:#fff;color:#fff}