@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:400 800;font-display:swap;src:url(/assets/fonts/hanken-grotesk.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400 700;font-display:swap;src:url(/assets/fonts/jetbrains-mono.woff2)format("woff2")}:root{--bg:#080c10;--panel:#0f141a;--panel2:#181e24;--fg:#e5e8ec;--muted:#8d9399;--faint:#868d94;--border:#292e35;--signal:#ade74e;--display:"Hanken Grotesk",system-ui,sans-serif;--mono:"JetBrains Mono",ui-monospace,monospace}@supports (color:lab(0% 0 0)){:root{--bg:lab(3.0365% -.547275 -2.50756);--panel:lab(6.17421% -1.04858 -4.60462);--panel2:lab(10.6547% -1.39257 -5.24303);--fg:lab(91.8753% -.66179 -2.14592);--muted:lab(60.5485% -1.28314 -4.26966);--faint:lab(58.2271% -1.38193 -4.62128);--border:lab(18.7805% -1.37891 -4.92533);--signal:lab(85.6123% -36.0435 65.0584)}}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--fg);font-family:var(--display);-webkit-font-smoothing:antialiased;background-image:radial-gradient(oklch(30% .014 250) 1px,#0000 1px);background-position:-17px -17px;background-size:34px 34px;font-size:16px;line-height:1.6}::selection{background:var(--signal);color:var(--bg)}.wrap{max-width:1120px;margin:0 auto;padding:0 28px}a{color:inherit;text-decoration:none}.sec-label{font-family:var(--mono);color:var(--signal);letter-spacing:.1em;text-transform:uppercase;font-size:12px}.sec-h{letter-spacing:-.02em;margin-top:12px;font-size:clamp(28px,4vw,42px);font-weight:800}header{z-index:50;border-bottom:1px solid var(--border);background:color-mix(in oklch,var(--bg) 80%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);position:sticky;top:0}.bar{justify-content:space-between;align-items:center;height:62px;display:flex}.brand{font-family:var(--mono);align-items:center;gap:10px;font-size:14px;font-weight:700;display:flex}.brand .blink{background:var(--signal);width:9px;height:16px;animation:1.1s steps(2,end) infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}nav.links{gap:6px;display:flex}nav.links a{font-family:var(--mono);color:var(--muted);border-radius:6px;padding:7px 12px;font-size:13px;transition:all .18s}nav.links a:hover{color:var(--fg);background:var(--panel2)}.lang{font-family:var(--mono);border:1px solid var(--border);border-radius:6px;flex:none;gap:2px;font-size:12px;display:flex;overflow:hidden}.lang a{color:var(--muted);padding:7px 10px;transition:all .15s}.lang a:hover{color:var(--fg);background:var(--panel2)}.lang a.is-active{color:var(--bg);background:var(--signal)}.nav-cta{font-family:var(--mono);background:var(--signal);color:var(--bg);border-radius:6px;padding:9px 16px;font-size:13px;font-weight:500;transition:all .18s}.nav-cta:hover{filter:brightness(1.08)}.burger{cursor:pointer;border:1px solid var(--border);background:var(--panel2);border-radius:6px;flex-direction:column;gap:4px;padding:10px;display:none}.burger span{background:var(--fg);width:18px;height:2px;transition:all .2s;display:block}.burger[aria-expanded=true] span:first-child{transform:translateY(6px)rotate(45deg)}.burger[aria-expanded=true] span:nth-child(2){opacity:0}.burger[aria-expanded=true] span:nth-child(3){transform:translateY(-6px)rotate(-45deg)}@media (max-width:980px){nav.links{background:var(--panel);border-bottom:1px solid var(--border);opacity:0;visibility:hidden;flex-direction:column;gap:0;max-height:0;padding:8px 20px 16px;transition:max-height .25s,opacity .2s,visibility .2s;position:absolute;top:100%;left:0;right:0;overflow:hidden;box-shadow:0 16px 32px #00000080}nav.links a{border-bottom:1px solid var(--border);padding:12px 8px;font-size:15px}nav.links.open{opacity:1;visibility:visible;max-height:60vh}.burger{display:flex}.bar{gap:10px}.bar .brand{margin-right:auto;font-size:13px}.nav-cta{white-space:nowrap;padding:8px 12px;font-size:12px}}@media (max-width:400px){.bar .brand{font-size:0}.bar .brand .blink{margin-left:2px}.bar .brand:before{content:"linh@cv";color:var(--fg);font-size:14px}.lang a{padding:7px 8px}}.hero{padding:76px 0 60px}.status{font-family:var(--mono);color:var(--signal);border:1px solid color-mix(in oklch,var(--signal) 40%,var(--border));background:color-mix(in oklch,var(--signal) 8%,transparent);letter-spacing:.04em;border-radius:999px;align-items:center;gap:10px;padding:7px 13px;font-size:12px;display:inline-flex}.pulse{background:var(--signal);border-radius:50%;width:7px;height:7px;animation:1.8s infinite pulse}@keyframes pulse{0%{box-shadow:0 0 0 0 color-mix(in oklch,var(--signal) 60%,transparent)}70%{box-shadow:0 0 0 9px #0000}to{box-shadow:0 0 #0000}}h1{letter-spacing:-.03em;max-width:17ch;margin-top:24px;font-size:clamp(38px,6.4vw,74px);font-weight:800;line-height:1.02}h1 .sig{color:var(--signal)}.term{font-family:var(--mono);color:var(--muted);background:var(--panel);border:1px solid var(--border);border-radius:10px;max-width:66ch;margin-top:30px;font-size:14.5px;overflow:hidden}.term .t{border-bottom:1px solid var(--border);background:var(--panel2);gap:7px;padding:11px 14px;display:flex}.term .t i{border-radius:50%;width:11px;height:11px;display:inline-block}.term .b{padding:18px}.term .b .c{color:var(--signal)}.term .b b{color:var(--fg);font-weight:500}.type{border-right:2px solid var(--signal);animation:1s steps(2,end) infinite cur}@keyframes cur{50%{border-color:#0000}}.hero-actions{flex-wrap:wrap;gap:14px;margin-top:34px;display:flex}.btn{font-family:var(--mono);cursor:pointer;border:1px solid #0000;border-radius:8px;padding:13px 22px;font-size:14px;font-weight:500;transition:all .18s}.btn.primary{background:var(--signal);color:var(--bg)}.btn.primary:hover{transform:translateY(-2px)}.btn.ghost{border-color:var(--border);color:var(--fg)}.btn.ghost:hover{background:var(--panel2);border-color:var(--faint)}.stats{border:1px solid var(--border);background:var(--panel);border-radius:12px;margin-top:54px;overflow:hidden}.stats .top{border-bottom:1px solid var(--border);background:var(--panel2);font-family:var(--mono);color:var(--faint);align-items:center;gap:8px;padding:11px 16px;font-size:12px;display:flex}.stats .body{grid-template-columns:repeat(4,1fr);display:grid}.stats .cell{border-right:1px solid var(--border);padding:24px 22px}.stats .cell:last-child{border-right:0}.stats .lab{font-family:var(--mono);color:var(--faint);letter-spacing:.1em;text-transform:uppercase;font-size:11px}.stats .val{margin-top:10px;font-size:26px;font-weight:700}.stats .val span{color:var(--signal)}@media (max-width:720px){.stats .body{grid-template-columns:1fr 1fr}.stats .cell:nth-child(2){border-right:0}}section{padding:74px 0}.thesis{grid-template-columns:1fr 1.1fr;align-items:start;gap:54px;display:grid}.thesis .big{letter-spacing:-.01em;font-size:clamp(24px,3vw,32px);font-weight:600;line-height:1.28}.thesis .big mark{color:var(--signal);background:0 0}.thesis p{color:var(--muted);margin-bottom:16px}.thesis p b{color:var(--fg);font-weight:600}@media (max-width:760px){.thesis{grid-template-columns:1fr;gap:28px}}.commits{flex-direction:column;gap:14px;margin-top:6px;display:flex}.commit{border:1px solid var(--border);background:var(--panel);border-radius:12px;grid-template-columns:auto 1fr auto;align-items:start;gap:22px;padding:26px;transition:all .2s;display:grid}.commit:hover{border-color:color-mix(in oklch,var(--signal) 45%,var(--border));transform:translateY(-2px)}.commit .hash{font-family:var(--mono);color:var(--signal);padding-top:4px;font-size:13px}.commit .role{font-family:var(--mono);color:var(--faint);text-transform:uppercase;letter-spacing:.08em;font-size:11px}.commit h3{margin-top:4px;font-size:22px;font-weight:700}.commit p{color:var(--muted);max-width:64ch;margin-top:9px;font-size:15px}.chips{flex-wrap:wrap;gap:7px;margin-top:14px;display:flex}.chip{font-family:var(--mono);color:var(--muted);background:var(--panel2);border:1px solid var(--border);border-radius:6px;padding:4px 9px;font-size:11px}.commit .st{font-family:var(--mono);color:var(--signal);border:1px solid color-mix(in oklch,var(--signal) 40%,var(--border));white-space:nowrap;border-radius:999px;padding:4px 10px;font-size:11px}.commit .link{font-family:var(--mono);color:var(--signal);margin-top:14px;font-size:12px;display:inline-block}.commit .link:hover{text-decoration:underline}@media (max-width:680px){.commit{grid-template-columns:1fr}.commit .st{justify-self:start}}.tl{border-left:2px solid var(--border);margin-top:10px;margin-left:8px}.tl .row{padding:22px 0 22px 34px;position:relative}.tl .row:before{content:"";background:var(--bg);border:2px solid var(--faint);border-radius:50%;width:12px;height:12px;position:absolute;top:28px;left:-7px}.tl .row:hover:before{border-color:var(--signal);background:var(--signal)}.tl .yr{font-family:var(--mono);color:var(--faint);letter-spacing:.04em;font-size:12px}.tl h3{margin-top:4px;font-size:19px;font-weight:700}.tl h3 .badge{font-family:var(--mono);color:var(--signal);margin-left:8px;font-size:11px;font-weight:500}.tl p{color:var(--muted);max-width:72ch;margin-top:7px;font-size:14.5px}.tl .chips{margin-top:10px}.prod{grid-template-columns:1fr 1fr;gap:14px;margin-top:6px;display:grid}.pcard{border:1px solid var(--border);background:var(--panel);border-radius:12px;padding:24px;transition:all .2s}.pcard:hover{background:var(--panel2)}.pcard .h{justify-content:space-between;align-items:baseline;display:flex}.pcard h3{font-size:19px;font-weight:700}.pcard .tag{font-family:var(--mono);color:var(--signal);font-size:11px}.pcard p{color:var(--muted);margin-top:8px;font-size:14.5px}.pcard .stack{font-family:var(--mono);color:var(--faint);margin-top:12px;font-size:12px}@media (max-width:680px){.prod{grid-template-columns:1fr}}.tracks{grid-template-columns:1fr 1fr;gap:14px;margin-top:14px;display:grid}.track{border:1px solid var(--border);background:var(--panel);border-radius:12px;padding:26px;transition:all .2s}.track:hover{border-color:color-mix(in oklch,var(--signal) 45%,var(--border))}.track .h{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px;display:flex}.track h3{font-size:22px;font-weight:700}.track .tag{font-family:var(--mono);color:var(--signal);font-size:11px}.track p{color:var(--muted);margin-top:9px;font-size:15px}.track .steps{counter-reset:s;border-top:1px solid var(--border);margin-top:18px;list-style:none}.track .steps li{counter-increment:s;border-bottom:1px solid var(--border);color:var(--muted);padding:12px 0 12px 34px;font-size:14.5px;position:relative}.track .steps li:before{content:counter(s,decimal-leading-zero);font-family:var(--mono);color:var(--signal);font-size:12px;position:absolute;top:13px;left:0}.track .steps b{color:var(--fg);font-weight:600}.tracks-foot{font-family:var(--mono);color:var(--faint);max-width:70ch;margin-top:22px;font-size:13px}@media (max-width:680px){.tracks{grid-template-columns:1fr}}.cta{border:1px solid var(--border);background:linear-gradient(180deg,var(--panel2),var(--panel));text-align:center;border-radius:16px;padding:64px 48px;position:relative;overflow:hidden}.cta:before{content:"";background:radial-gradient(620px 320px at 50% -20%,color-mix(in oklch,var(--signal) 14%,transparent),transparent);position:absolute;inset:0}.cta>*{position:relative}.cta h2{letter-spacing:-.03em;font-size:clamp(30px,5vw,54px);font-weight:800}.cta h2 .sig{color:var(--signal)}.cta p{color:var(--muted);max-width:50ch;margin:18px auto 0}.cta .run{font-family:var(--mono);background:var(--signal);color:var(--bg);border-radius:10px;align-items:center;gap:12px;margin-top:32px;padding:16px 26px;font-weight:700;transition:all .18s;display:inline-flex}.cta .run:hover{transform:translateY(-2px)}footer{border-top:1px solid var(--border);margin-top:30px;padding:34px 0}.foot{font-family:var(--mono);color:var(--faint);flex-wrap:wrap;justify-content:space-between;gap:12px;font-size:12px;display:flex}#products{content-visibility:auto;contain-intrinsic-size:auto 720px}@media (max-width:560px){.wrap{padding:0 18px}section{padding:52px 0}.hero{padding:48px 0 40px}.term .b{padding:14px;font-size:13px}.stats .cell{padding:18px 16px}.stats .val{font-size:22px}.cta{padding:44px 22px}.hero-actions{gap:10px}.btn{text-align:center;flex:auto}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}
