@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #ededee;--surface: #f7f9fa;--surface-2: #f3f5f7;--text: #1f2937;--text-strong: #111827;--muted: #4b6b64;--accent: #0f766e;--accent-strong: #115e59;--accent-soft: #edf8f6;--accent-soft-hover: #ddf1ed;--accent-border: #9dc8c2;--line: #d8dde4;--code-bg: #e6eceb;--pre-bg: #1f2d2b;--pre-text: #e6f0ee;--quote-bg: #eef4f3;--footer-text: #8b96a6}:root[data-theme=dark]{--bg: #0f1513;--surface: #161d1b;--surface-2: #1b2422;--text: #c9d3d0;--text-strong: #f1f5f4;--muted: #8fa8a2;--accent: #4fd1c5;--accent-strong: #7fdcd2;--accent-soft: #14201e;--accent-soft-hover: #1c2c29;--accent-border: #2f4c47;--line: #263230;--code-bg: #202b29;--pre-bg: #10201d;--pre-text: #d7e6e2;--quote-bg: #16211f;--footer-text: #6b7d78;color-scheme:dark}*{box-sizing:border-box;margin:0;padding:0}html{color-scheme:light}body{font-family:Inter Variable,Segoe UI,Helvetica Neue,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;padding:40px 28px 0;-webkit-font-smoothing:antialiased;transition:background-color .2s ease,color .2s ease}a{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.container{max-width:1150px;margin:0 auto;display:grid;gap:56px;padding-bottom:40px}.card{background:transparent}h1{font-size:2.35rem;font-weight:300;letter-spacing:.2px;margin-bottom:6px;color:var(--text-strong)}h2{font-size:1.55rem;font-weight:300;margin-bottom:18px;border-bottom:1px solid var(--line);padding-bottom:8px;color:var(--text-strong)}h3{font-size:1.08rem;margin-bottom:8px;font-weight:500;color:var(--text-strong)}p,li{color:var(--text);font-size:1.04rem}.top-nav{max-width:1150px;margin:0 auto 40px;display:flex;align-items:center;justify-content:space-between;gap:12px}.nav-left{display:flex;align-items:center;gap:12px}.brand{font-size:1.1rem;font-weight:600;color:var(--accent-strong);letter-spacing:.2px;text-decoration:none}.brand:hover{text-decoration:underline}.nav-actions{display:flex;align-items:center;gap:10px}.nav-btn{display:inline-flex;align-items:center;justify-content:center;padding:8px 14px;border:1px solid var(--accent-border);border-radius:999px;color:var(--accent-strong);text-decoration:none;font-size:.9rem;font-weight:500;background:var(--accent-soft);transition:background-color .2s ease}.nav-btn:hover,.nav-btn[aria-current=page]{background:var(--accent-soft-hover)}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--accent-border);border-radius:999px;background:var(--accent-soft);color:var(--accent-strong);cursor:pointer;transition:background-color .2s ease}.theme-toggle:hover{background:var(--accent-soft-hover)}.hamburger{display:none;flex-direction:column;cursor:pointer;gap:5px;background:none;border:none;padding:6px}.hamburger span{width:24px;height:2.5px;background:var(--accent-strong);border-radius:2px;transition:all .3s ease}.hamburger.active span:nth-child(1){transform:rotate(45deg) translate(8px,8px)}.hamburger.active span:nth-child(2){opacity:0}.hamburger.active span:nth-child(3){transform:rotate(-45deg) translate(7px,-7px)}.hero{display:grid;grid-template-columns:180px 1fr;gap:28px;align-items:center}.avatar{width:180px;height:180px;border-radius:50%;object-fit:cover;border:3px solid var(--line);display:block;justify-self:start}.subtitle{color:var(--muted);font-size:1.35rem;font-weight:300;margin-bottom:10px}.meta{display:flex;flex-wrap:wrap;gap:8px 26px;color:var(--muted);font-size:1rem;margin-top:6px}.meta a{color:var(--accent);text-decoration:none;font-weight:400}.meta a:hover{text-decoration:underline}.about-text{max-width:1020px;font-size:1.05rem;color:var(--text);line-height:1.75}.hl{color:var(--accent);font-weight:600}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.list{padding-left:18px;display:grid;gap:6px}.job{margin-bottom:14px}.job-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;margin-bottom:4px}.job-meta{color:var(--muted);font-size:.9rem}.tag-list{display:flex;flex-wrap:wrap;gap:8px}.tag{border:1px solid var(--line);background:var(--surface-2);color:var(--text);border-radius:999px;padding:4px 10px;font-size:.85rem}.tech-skills .tag{transition:background-color .2s ease,border-color .2s ease,color .2s ease}.tech-skills .tag:hover{background:var(--accent-soft-hover);border-color:var(--accent-border);color:var(--accent-strong)}.project-title{margin-bottom:6px}.project-title a{color:var(--accent);text-decoration:none}.project-title a:hover{text-decoration:underline}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}.see-all{color:var(--accent);text-decoration:none;font-size:.95rem;white-space:nowrap}.see-all:hover{text-decoration:underline}.footer{max-width:1150px;margin:80px auto 0;padding:40px 0;border-top:1px solid var(--line);text-align:center;color:var(--footer-text);font-size:.9rem}.footer a{color:var(--accent);text-decoration:none}.footer a:hover{text-decoration:underline}.tag-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:22px}.tag-filter .tag{cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.tag-filter .tag:hover{border-color:var(--accent-border)}.tag-filter .tag-on{background:var(--accent-strong);border-color:var(--accent-strong);color:#fff}.blog-list{display:grid;gap:16px}.blog-card{display:block;text-decoration:none;color:inherit;border:1px solid var(--line);border-radius:12px;padding:20px 22px;background:var(--surface);transition:border-color .2s ease,background .2s ease,transform .2s ease}.blog-card:hover{border-color:var(--accent-border);background:var(--accent-soft);transform:translateY(-2px)}.blog-card h3{color:var(--accent-strong);margin-bottom:4px}.post-meta{color:var(--muted);font-size:.85rem;margin-bottom:6px}.post .back-link{color:var(--accent);text-decoration:none;font-size:.95rem}.post .back-link:hover{text-decoration:underline}.post-header{margin:14px 0 26px}.post-header h1{margin-bottom:10px}.post-header .tag-list{margin-top:12px}.post-body{display:grid;grid-template-columns:1fr;gap:32px}@media(min-width:1040px){.post-body{grid-template-columns:1fr 220px}.post-body .prose{grid-row:1;grid-column:1}.toc{grid-row:1;grid-column:2}}.toc{align-self:start;font-size:.9rem}.toc-toggle{background:none;border:none;color:var(--muted);font:inherit;font-weight:600;text-transform:uppercase;letter-spacing:.06em;font-size:.78rem;cursor:pointer;padding:0;margin-bottom:10px}.toc ul{list-style:none;display:grid;gap:6px;border-left:1px solid var(--line);padding-left:14px}.toc-sub{padding-left:12px}.toc a{color:var(--muted);text-decoration:none;line-height:1.4;display:block}.toc a:hover{color:var(--accent)}.toc a.toc-active{color:var(--accent);font-weight:600}@media(min-width:1040px){.toc{position:sticky;top:24px;max-height:calc(100vh - 48px);overflow-y:auto}.toc-toggle{pointer-events:none}}@media(max-width:1039px){.toc{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:var(--surface)}.toc-toggle:after{content:" ▾"}.toc:not(.toc-open) ul{display:none}.toc.toc-open .toc-toggle:after{content:" ▴"}}.post-nav{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:48px;padding-top:24px;border-top:1px solid var(--line)}.post-nav-link{display:grid;gap:4px;text-decoration:none;color:var(--text);border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:var(--surface);transition:border-color .2s ease}.post-nav-link:hover{border-color:var(--accent-border)}.post-nav-link span{color:var(--muted);font-size:.82rem}.post-nav-link strong{color:var(--accent-strong);font-weight:500;font-size:.95rem}.post-nav-next{text-align:right}.prose{max-width:760px;color:var(--text);line-height:1.75;overflow-wrap:break-word;min-width:0}.prose h1,.prose h2,.prose h3,.prose h4{font-weight:500;line-height:1.3;margin:1.8em 0 .6em;scroll-margin-top:24px}.prose h1{font-size:1.8rem}.prose h2{font-size:1.4rem;border-bottom:1px solid var(--line);padding-bottom:6px}.prose h3{font-size:1.14rem}.prose p,.prose li{font-size:1.02rem}.prose p{margin:.9em 0}.prose ul,.prose ol{margin:.9em 0;padding-left:1.4em;display:grid;gap:4px}.prose a{color:var(--accent);text-decoration:underline}.prose img{max-width:100%;height:auto;border-radius:8px;margin:1em 0;display:block}.prose blockquote{margin:1.1em 0;padding:8px 16px;border-left:3px solid var(--accent-border);background:var(--quote-bg);color:var(--muted)}.prose blockquote p{margin:.3em 0}.prose code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.9em;background:var(--code-bg);padding:2px 6px;border-radius:4px}.prose pre{position:relative;background:var(--pre-bg);color:var(--pre-text);padding:16px 18px;border-radius:10px;overflow-x:auto;margin:1.2em 0;font-size:.88rem;line-height:1.6}.prose pre code{background:none;padding:0;color:inherit;font-size:inherit}.copy-btn{position:absolute;top:8px;right:8px;border:1px solid rgba(255,255,255,.2);background:#ffffff14;color:#e6f0ee;font-size:.72rem;padding:3px 8px;border-radius:5px;cursor:pointer;opacity:0;transition:opacity .15s ease}.prose pre:hover .copy-btn,.copy-btn:focus-visible{opacity:1}.prose hr{border:none;border-top:1px solid var(--line);margin:2em 0}.prose table{border-collapse:collapse;width:100%;margin:1.2em 0;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--line);padding:8px 12px;text-align:left}.prose th{background:var(--quote-bg)}.hljs-comment,.hljs-quote{color:#8a9a97;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-built_in,.hljs-name{color:#ff9d7a}.hljs-string,.hljs-attr,.hljs-template-tag{color:#9ee6b8}.hljs-number,.hljs-literal,.hljs-type{color:#f0c674}.hljs-title,.hljs-section,.hljs-function .hljs-title{color:#8fd3ff}.hljs-meta{color:#b8a8ff}@media(prefers-reduced-motion:no-preference){.js .reveal{opacity:0;transform:translateY(12px);transition:opacity .5s ease,transform .5s ease}.js .reveal.is-visible{opacity:1;transform:none}}@media(max-width:800px){.grid-2{grid-template-columns:1fr}.hero{grid-template-columns:1fr;justify-items:center;text-align:center}.hero .avatar{order:-1;justify-self:center}h1{font-size:1.95rem}.subtitle{font-size:1.1rem}.meta,.meta a{font-size:1.05rem}.meta{justify-content:center}body{padding:20px 14px 0}.top-nav{margin-bottom:24px;position:relative}.hamburger{display:flex}.nav-actions{display:none;width:100%;flex-direction:column;position:absolute;top:52px;left:0;right:0;background:var(--bg);padding:14px;border-bottom:1px solid var(--line);gap:8px;z-index:10}.nav-actions.active{display:flex}.nav-btn{flex:1}.post-nav{grid-template-columns:1fr}.post-nav-next{text-align:left}}
