@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+460-52F,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+301,U+400-45F,U+490-491,U+4B0-4B1,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+1F??}@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+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@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+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: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+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: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+??,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{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-optical-sizing:auto;color:var(--text);background:var(--bg);font-family:Inter Variable,Inter,ui-sans-serif,system-ui,sans-serif;font-weight:400;transition:background-color .22s,color .22s}*{box-sizing:border-box}body{background:var(--bg);min-width:320px;min-height:100vh;color:var(--text);margin:0;transition:background-color .22s,color .22s}button,input{font:inherit}a{color:var(--text);text-underline-offset:4px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);transition:color .18s,opacity .18s,text-decoration-color .18s}a:hover{color:var(--accent);opacity:.78}.page{background:var(--bg);max-width:650px;min-height:100vh;color:var(--text);margin:0 auto;padding:72px 24px 96px;transition:background-color .22s,color .22s}.header{align-items:center;gap:28px;margin-bottom:36px;display:flex}.avatar{background:color-mix(in srgb, var(--border) 55%, var(--bg));width:128px;height:128px;color:var(--muted);letter-spacing:.02em;border-radius:14px;flex:0 0 128px;justify-content:center;align-items:center;font-size:34px;display:flex;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.avatar.grayscale img{filter:grayscale()}.intro{min-width:0}h1{color:var(--text);margin:0 0 8px;font-size:30px;font-weight:400;line-height:1.2}.header h1{letter-spacing:-.03em;margin-bottom:8px;font-family:Inter Variable,Inter,sans-serif;font-size:30px;font-weight:500}.bio{color:var(--muted);margin:0 0 12px;font-size:16px;line-height:1.6}.socials{flex-wrap:wrap;align-items:baseline;font-size:15.5px;line-height:1.7;display:flex}.social-item{white-space:nowrap}.social-separator{color:var(--muted);white-space:pre}.contributions{width:100%;margin-bottom:48px}.month-row{min-width:728px;color:var(--muted);justify-content:space-between;margin-bottom:8px;font-size:13px;display:flex}.contribution-scroll{scrollbar-color:var(--border) transparent;scrollbar-width:thin;padding-bottom:7px;overflow-x:auto}.contribution-scroll::-webkit-scrollbar{height:5px}.contribution-scroll::-webkit-scrollbar-track{background:0 0}.contribution-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}.contribution-grid{grid-template-rows:repeat(7,10px);grid-auto-columns:10px;grid-auto-flow:column;gap:4px;width:max-content;display:grid}.contribution{background:var(--border);border-radius:2px;width:10px;height:10px}.contribution.level-1{background:var(--accent);opacity:.25}.contribution.level-2{background:var(--accent);opacity:.5}.contribution.level-3{background:var(--accent);opacity:.75}.contribution.level-4{background:var(--accent)}.contribution.sparkle{transform-origin:50%;animation:5.2s ease-in-out infinite contribution-sparkle}@keyframes contribution-sparkle{0%,68%,to{filter:brightness();transform:scale(1);box-shadow:0 0 #0000}78%{filter:brightness(1.22);box-shadow:0 0 6px color-mix(in srgb, var(--accent) 55%, transparent);transform:scale(1.1)}88%{filter:brightness(1.08);box-shadow:0 0 2px color-mix(in srgb, var(--accent) 32%, transparent);transform:scale(1.02)}}@media (prefers-reduced-motion:reduce){.contribution.sparkle{animation:none}}.content-section{margin:0 0 48px}.section-heading{border-bottom:1px solid var(--border);color:var(--muted);letter-spacing:.04em;text-transform:lowercase;margin:0 0 22px;padding-bottom:10px;font-size:16px;font-weight:400}.writing-list,.experience-list,.project-list,.education-list{flex-direction:column;display:flex}.writing-list{gap:16px;margin-bottom:0}.writing-list a{width:fit-content;font-size:17px;line-height:1.6}.experience-list{gap:20px}.experience-role,.education-degree{font-size:17px}.experience-role{color:var(--text);text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:4px}.experience-meta,.education-meta{color:var(--muted);margin:4px 0 0;font-size:16px;line-height:1.6}.project-list{gap:20px}.project-topline{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.project-item h3{color:var(--text);text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:4px;margin:0;font-size:17px;font-weight:400;text-decoration-thickness:1px}.project-links{white-space:nowrap;flex:none;margin:0;font-size:14px}.project-links span{color:var(--muted);white-space:pre}.project-item p{color:var(--muted);margin:3px 0 0;font-size:16px;line-height:1.6}.expand-button{width:fit-content;color:var(--muted);text-align:left;text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:4px;cursor:pointer;background:0 0;border:0;margin-top:-7px;padding:0;font-family:inherit;font-size:16px;display:block}.education-list{gap:20px}.education-degree{color:var(--text);-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.education-degree-text{text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:4px;text-decoration-thickness:1px}.footer{color:var(--muted);margin-top:48px;font-size:16px}.guestbook-page{min-height:100vh}.guestbook-header{margin-bottom:32px}.guestbook-header h1{color:var(--text);letter-spacing:-.03em;margin:0;font-size:30px;font-weight:500}.guestbook-list{flex-direction:column;gap:20px;display:flex}.guestbook-empty{color:var(--muted);font-size:16px;line-height:1.6}.guestbook-entry{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:baseline;gap:0 8px;padding-bottom:16px;font-size:16px;line-height:1.6;display:flex}.guestbook-entry:last-child{border-bottom:0}.guestbook-name{color:var(--text);font-weight:600}.guestbook-dash,.guestbook-message{color:var(--muted)}.guestbook-date{width:100%;color:var(--muted);font-size:13px}.guestbook-form{flex-direction:column;gap:12px;margin-bottom:36px;display:flex}.guestbook-name-input,.guestbook-message-input{border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 80%, white);width:100%;color:var(--text);border-radius:6px;padding:9px 12px;font-family:inherit;font-size:15px;line-height:1.5}.guestbook-message-input{resize:vertical;min-height:72px}.guestbook-name-input:focus,.guestbook-message-input:focus,.guestbook-submit:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.guestbook-submit{border:1px solid var(--text);background:var(--text);color:var(--bg);cursor:pointer;border-radius:999px;align-self:flex-start;padding:8px 16px;font-family:inherit;font-size:14px;font-weight:500;transition:opacity .16s}.guestbook-submit:hover{opacity:.85}.guestbook-submit:disabled{opacity:.5;cursor:default}.guestbook-error{color:#b91c1c;font-size:14px}.projects-page{max-width:850px}.projects-topbar{justify-content:space-between;align-items:center;gap:16px;margin-bottom:72px;display:flex}.back-link{color:var(--muted);font-size:15px}.project-count{color:var(--muted);font-size:14px}.projects-page-header{max-width:590px;margin-bottom:44px}.projects-page-header>p:first-child{color:var(--accent);letter-spacing:.06em;margin:0 0 12px;font-size:14px}.projects-page-header h1{margin:0;font-size:42px;line-height:1.15}.projects-header-rule{background:var(--border);width:100%;height:1px;margin:24px 0 18px}.projects-page-intro{max-width:520px;color:var(--muted);margin:0;font-size:17px;line-height:1.6}.projects-archive{border:1px solid var(--border);background:var(--border);grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.archive-project{background:var(--bg);gap:20px;min-height:220px;padding:25px 23px;transition:background-color .18s;display:flex}.archive-project:hover{background:color-mix(in srgb, var(--bg) 88%, var(--accent))}.archive-project-number{color:var(--accent);padding-top:4px;font-size:13px}.archive-project-content{flex-direction:column;flex:1;align-items:flex-start;display:flex}.archive-project h2{margin:0 0 10px;font-size:21px;font-weight:400}.archive-project p{color:var(--muted);margin:0 0 20px;font-size:15.5px;line-height:1.55}.archive-project .project-links{margin:auto 0 0}.projects-page-footer{justify-content:flex-start;margin-top:32px;display:flex}.blog-page{background:var(--bg);min-height:100vh;color:var(--text)}.blog-index{flex-direction:column;gap:28px;width:100%;margin:0 auto;display:flex}.blog-card{color:var(--text);border-radius:0;padding:0;text-decoration:none;display:block}.blog-card:hover{color:var(--text);opacity:1}.blog-card h2{width:fit-content;max-width:100%;color:var(--text);overflow-wrap:anywhere;margin:0 0 5px;font-size:20px;font-weight:600;line-height:1.4;display:table}.blog-card h2:after{width:var(--blog-underline-width,0);background:var(--accent);content:"";transform-origin:0;border-radius:2px;height:2px;margin-top:7px;transition:transform .42s cubic-bezier(.22,1,.36,1);display:block;transform:scaleX(0)}.blog-card:hover h2:after,.blog-card:focus-visible h2:after{transform:scaleX(1)}.blog-excerpt{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:15px;line-height:1.6;display:-webkit-box;overflow:hidden}.blog-meta{color:var(--muted);flex-wrap:wrap;gap:16px;margin-top:15px;font-size:12px;font-weight:400;display:flex}.blog-article{max-width:720px;margin:0 auto}.post-back{color:var(--muted);margin-bottom:42px;font-size:14px;text-decoration:none;display:inline-block}.post-back:hover{color:var(--accent)}.blog-post-header .blog-meta{margin:0 0 16px;font-weight:500}.blog-post-header h1{letter-spacing:-.04em;margin:0;font-size:clamp(32px,6vw,44px);font-weight:700;line-height:1.12}.blog-post-header>p{color:var(--muted);margin:16px 0 0;font-size:17px;line-height:1.65}.markdown-body{color:var(--text);overflow-wrap:anywhere;margin-top:42px;font-size:16px;line-height:1.85}.markdown-body>:first-child{margin-top:0}.markdown-body h2{margin:2em 0 .6em;font-size:25px;line-height:1.3}.markdown-body h3{margin:1.7em 0 .5em;font-size:19px;line-height:1.4}.markdown-body p,.markdown-body ul,.markdown-body ol{margin:0 0 1.2em}.markdown-body ul,.markdown-body ol{padding-left:1.5em}.markdown-body li{margin:.35em 0;padding-left:.25em}.markdown-body blockquote{border-left:2px solid var(--accent);color:var(--muted);margin:1.5em 0;padding-left:1em}.markdown-body pre{border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 87%, var(--text));border-radius:8px;margin:1.5em 0;padding:16px 18px;font-size:13px;line-height:1.6;overflow-x:auto}.markdown-body :not(pre)>code{border:1px solid var(--border);background:color-mix(in srgb, var(--bg) 87%, var(--text));border-radius:4px;padding:2px 5px;font-size:.9em}.markdown-body img{border-radius:8px;max-width:100%;height:auto}.markdown-body hr{background:var(--border);border:0;height:1px;margin:2em 0}.blog-not-found p{color:var(--muted)}@media (width<=520px){.page{padding:52px 22px 72px}.header{flex-direction:column;align-items:flex-start;gap:18px;margin-bottom:32px}.avatar{border-radius:12px;flex-basis:96px;width:96px;height:96px}h1{font-size:27px}.bio{font-size:16px}.socials{font-size:14px}}@media (width<=650px){.projects-page{padding-top:36px}.projects-topbar{margin-bottom:52px}.projects-archive{grid-template-columns:1fr}.archive-project{min-height:0;padding:22px 18px}.projects-page-header h1{font-size:36px}}@media (width<=700px){.blog-index{gap:24px}.blog-card h2{font-size:18px;line-height:1.4}.blog-excerpt{font-size:14px}}
