@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.f2220059.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.f6f1950f.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.bd5f4d11.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.51c18f09.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:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.23358719.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.15008bfb.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 Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_dc177b0e-module__78ed6G__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_dc177b0e-module__78ed6G__variable{--font-mono:"JetBrains Mono","JetBrains Mono Fallback"}
:root{--bg:#0a0b0d;--bg-2:#0f1114;--surface:#13161a;--surface-hover:#181b20;--text:#f4f6f8;--text-secondary:#a6adb7;--text-muted:#838b97;--text-faint:#6f7884;--border:#ffffff14;--border-strong:#ffffff24;--accent:#8ecdf4;--accent-bright:#b8e3ff;--accent-muted:#6faed6;--accent-soft:#8ecdf414;--accent-glow:#8ecdf41a;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--gutter:clamp(16px,4vw,48px);--max:1200px;--section:clamp(5rem,10vw,8.5rem);--fs-hero:clamp(2.25rem,4.4vw,4.5rem);--fs-page:clamp(2.25rem,4.6vw,3.75rem);--fs-h2:clamp(1.5rem,2.4vw,2.1rem);--fs-h3:clamp(1.05rem,1.4vw,1.2rem);--fs-body:clamp(1rem,.96rem + .15vw,1.0625rem);--fs-small:.8125rem;--fs-tiny:.75rem;--ease:cubic-bezier(.2,.7,.2,1);--fast:.16s;--med:.26s;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}*{margin:0}html{scrollbar-color:#33383f var(--bg);-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:88px}body{background:var(--bg);min-height:100dvh;color:var(--text);font-family:var(--font-mono),"JetBrains Mono",ui-monospace,monospace;font-size:var(--fs-body);font-variant-ligatures:contextual;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;line-height:1.7;overflow-x:clip}body:before{content:"";z-index:-1;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");position:fixed;inset:0}img,svg{max-width:100%;height:auto;display:block}a{color:inherit;text-decoration:none}ul[role=list],ol[role=list]{padding:0;list-style:none}h1,h2,h3,h4{letter-spacing:-.02em;text-wrap:balance;font-weight:600;line-height:1.15}p{text-wrap:pretty}::selection{background:var(--accent);color:var(--bg)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.container{width:100%;max-width:var(--max);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--section);position:relative}.section+.section:before{content:"";top:0;left:var(--gutter);right:var(--gutter);border-top:1px solid var(--border);position:absolute}.skip-link{left:var(--gutter);z-index:100;background:var(--text);color:var(--bg);border-radius:var(--radius-sm);padding:10px 16px;position:absolute;top:-100px}.skip-link:focus{top:12px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}.label{font-size:var(--fs-small);color:var(--text-muted)}.muted{color:var(--text-muted)}.secondary{color:var(--text-secondary)}.accent{color:var(--accent)}.lead{font-size:var(--fs-body);color:var(--text-secondary);max-width:60ch;line-height:1.8}.lead+.lead{margin-top:1.1em}.lead--strong{color:var(--text);font-size:clamp(1.1rem,1.6vw,1.3rem);line-height:1.5}.lead strong,.lead em{color:var(--text);font-style:normal;font-weight:500}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px 32px;margin-bottom:clamp(32px,5vw,56px);display:flex}.section-head__title{font-size:var(--fs-h2);letter-spacing:-.03em;font-weight:600}.section-head__intro{max-width:56ch;color:var(--text-secondary);margin-top:10px}.link{min-height:44px;color:var(--text);transition:color var(--fast)var(--ease);align-items:center;gap:.6ch;font-weight:500;display:inline-flex}.link:hover{color:var(--accent)}.link--quiet{font-size:var(--fs-small);color:var(--text-secondary);font-weight:400}.link--quiet:hover{color:var(--text)}.arrow{transition:transform var(--med)var(--ease);display:inline-block}a:hover .arrow,a:focus-visible .arrow{transform:translate(3px)}a:hover .arrow--ne,a:focus-visible .arrow--ne{transform:translate(2px,-2px)}.inline-link{color:var(--text);text-decoration:underline;-webkit-text-decoration-color:var(--border-strong);text-decoration-color:var(--border-strong);text-underline-offset:4px;transition:text-decoration-color var(--fast)var(--ease),color var(--fast)var(--ease);text-decoration-thickness:1px}.inline-link:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.button{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:44px;font-size:var(--fs-small);white-space:nowrap;transition:background var(--fast)var(--ease),color var(--fast)var(--ease),border-color var(--fast)var(--ease);background:0 0;align-items:center;gap:1ch;padding:0 18px;font-weight:500;display:inline-flex}.button:hover{background:var(--text);border-color:var(--text);color:var(--bg)}.button--quiet{color:var(--text-secondary);border-color:#0000;padding-inline:6px}.button--quiet:hover{color:var(--accent);background:0 0;border-color:#0000}.actions{flex-wrap:wrap;align-items:center;gap:12px 20px;display:flex}.slash-list{font-size:var(--fs-small);color:var(--text-secondary);flex-wrap:wrap;padding:0;list-style:none;display:flex}.slash-list li:not(:last-child):after{content:"/";color:var(--text-faint);margin-inline:.8ch}.site-header{z-index:50;-webkit-backdrop-filter:blur(10px);border-bottom:1px solid var(--border);background:#0a0b0dd1;padding-block:10px;position:sticky;top:0}.site-header__inner{justify-content:space-between;align-items:center;gap:24px;display:flex}.logo{letter-spacing:-.02em;align-items:center;gap:9px;min-height:44px;font-size:.9375rem;font-weight:600;display:inline-flex}.logo__dot{background:var(--accent);border-radius:50%;width:7px;height:7px}.nav-links{gap:4px;padding:0;list-style:none;display:none}.nav-link{min-height:44px;color:var(--text-secondary);transition:color var(--fast)var(--ease);align-items:center;gap:.5ch;padding-inline:12px;font-size:.875rem;display:inline-flex;position:relative}.nav-link:hover,.nav-link[aria-current=page]{color:var(--text)}.nav-link[aria-current=page]:after{content:"";background:var(--accent);height:1px;position:absolute;bottom:8px;left:12px;right:12px}.nav-aside{align-items:center;gap:4px;display:none}.nav-aside .button{min-height:36px;margin-left:10px}.menu{position:relative}.menu>summary{border:1px solid var(--border-strong);border-radius:var(--radius-sm);min-height:44px;font-size:var(--fs-small);cursor:pointer;align-items:center;padding-inline:16px;list-style:none;display:inline-flex}.menu>summary::-webkit-details-marker{display:none}.menu[open]>summary{border-color:var(--text-secondary)}.menu__panel{background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-lg);width:min(88vw,300px);padding:8px;position:absolute;top:calc(100% + 8px);right:0}.menu__panel ul{padding:0;list-style:none}.menu__panel a{border-radius:var(--radius-sm);justify-content:space-between;align-items:center;min-height:46px;padding-inline:12px;font-size:.9375rem;display:flex}.menu__panel a:hover,.menu__panel a[aria-current=page]{background:var(--surface-hover)}.menu__panel hr{border:0;border-top:1px solid var(--border);margin:8px 0}@media (min-width:1024px){.nav-links,.nav-aside{display:flex}.menu{display:none}}.hero{isolation:isolate;padding-block:clamp(4.5rem,12vw,9rem)var(--section);align-items:center;gap:48px;display:grid;position:relative}.hero__name{font-size:var(--fs-body);letter-spacing:-.01em;color:var(--text-secondary);align-items:center;gap:10px;margin-bottom:clamp(20px,2.5vw,28px);font-weight:500;display:flex}.hero__name:before{content:"";background:var(--accent);border-radius:50%;width:6px;height:6px}.hero__title{font-size:var(--fs-hero);letter-spacing:-.045em;max-width:17ch;font-weight:600;line-height:1.08;display:block}.hero__meta{color:var(--text-secondary);max-width:46ch;margin-top:clamp(20px,2.5vw,28px)}.hero .actions{margin-top:clamp(28px,3.5vw,40px)}.cards{gap:16px;padding:0;list-style:none;display:grid}@media (min-width:760px){.cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1080px){.cards--3{grid-template-columns:repeat(3,minmax(0,1fr))}}.card{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--bg-2);flex-direction:column;gap:20px;height:100%;padding:clamp(22px,2.6vw,30px);display:flex}.card__main,.card__side{flex-direction:column;gap:10px;display:flex}.card__side{gap:16px;margin-top:auto}.card__meta{font-size:var(--fs-small);color:var(--text-muted);justify-content:space-between;gap:12px;display:flex}.card__status:before{content:"";background:var(--accent);vertical-align:middle;border-radius:50%;width:5px;height:5px;margin-right:8px;display:inline-block}.card__title{letter-spacing:-.03em;margin-top:6px;font-size:clamp(1.2rem,1.8vw,1.45rem)}.card__role{font-size:var(--fs-small);color:var(--text-secondary)}.card__summary{color:var(--text-secondary);font-size:.9375rem;line-height:1.75}.card__list{border-top:1px solid var(--border);font-size:var(--fs-small);color:var(--text-secondary);gap:6px;margin-top:auto;padding:16px 0 0;list-style:none;display:grid}.card__list li{grid-template-columns:2.5ch 1fr;display:grid}.card__list li:before{content:"–";color:var(--text-faint)}.card--link{transition:border-color var(--fast)var(--ease),background var(--fast)var(--ease)}.card--link:hover,.card--link:focus-visible{border-color:var(--border-strong);background:var(--surface)}.card__read{font-size:var(--fs-small);color:var(--text-muted);transition:color var(--fast)var(--ease);margin-top:auto}.card--link:hover .card__read{color:var(--accent)}.project-grid{gap:16px;padding:0;list-style:none;display:grid}@media (min-width:720px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1080px){.project-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.project-box{border-radius:var(--radius-sm);background:#ffffff0d;border:1px solid #ffffff1a;flex-direction:column;justify-content:space-between;gap:24px;padding:20px;display:flex}.project-box__top{font-size:var(--fs-small);color:var(--text-muted);justify-content:space-between;align-items:center;gap:12px;display:flex}.project-box__icon{border-radius:var(--radius-sm);color:var(--text);background:#ffffff1a;padding:8px;display:inline-flex}.project-box__title{letter-spacing:-.02em;margin-top:18px;font-size:1.25rem;font-weight:700}.project-box__desc{color:var(--text);margin-top:12px}.project-box__story{color:var(--text-secondary);margin-top:8px;font-size:.9375rem}.project-box__label{font-size:var(--fs-small);margin-top:20px}.project-box__chips{flex-wrap:wrap;gap:8px;margin-top:8px;padding:0;list-style:none;display:flex}.project-box__chips li{font-size:var(--fs-small);cursor:default;transition:background var(--fast)var(--ease),color var(--fast)var(--ease);background:#ffffff1a;border:1px solid #fffc;border-radius:999px;padding:1px 10px}.project-box__chips li:hover{background:var(--text);color:var(--bg)}.project-box__actions{gap:8px;display:grid}.project-box__btn{min-height:44px;font-size:var(--fs-small);transition:background var(--fast)var(--ease),color var(--fast)var(--ease);background:#ffffff1a;border-radius:4px;align-items:center;gap:16px;padding:8px 16px;display:flex}.project-box__btn--repo{background:#030303}a.project-box__btn:hover,a.project-box__btn:focus-visible{background:var(--text);color:var(--bg)}.project-box__btn[aria-disabled=true]{color:#666;cursor:not-allowed}.project-box__btn--repo[aria-disabled=true]{background:#ffffff0a}.about-grid{gap:clamp(40px,6vw,96px);display:grid}@media (min-width:900px){.about-grid{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)}}.skills{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));align-content:start;gap:32px 24px;display:grid}.skills h3{font-size:var(--fs-small);letter-spacing:0;color:var(--text);margin-bottom:10px;font-weight:500}.skills ul{font-size:var(--fs-small);color:var(--text-secondary);line-height:1.95}.edu-line{font-size:var(--fs-small);color:var(--text-secondary);flex-wrap:wrap;gap:8px 24px;margin-top:32px;display:flex}.xp-detail{border-bottom:1px solid var(--border);gap:16px;padding-block:clamp(32px,4vw,48px);display:grid}.xp-detail__years{font-size:var(--fs-small);color:var(--text-muted);font-variant-numeric:tabular-nums}.xp-detail h2{font-size:var(--fs-h3)}.xp-detail ul{color:var(--text-secondary);gap:6px;padding-left:0;list-style:none;display:grid}.xp-detail li{grid-template-columns:2.5ch 1fr;display:grid}.xp-detail li:before{content:"–";color:var(--text-faint)}@media (min-width:900px){.xp-detail{grid-template-columns:16ch 1fr 1fr;gap:32px}}.archive{border-collapse:collapse;width:100%;font-size:var(--fs-small)}.archive th{text-align:left;color:var(--text-muted);border-bottom:1px solid var(--border);padding:0 12px 12px 0;font-weight:400}.archive td{border-bottom:1px solid var(--border);vertical-align:top;color:var(--text-secondary);padding:14px 12px 14px 0}.archive td:first-child{color:var(--text-muted);font-variant-numeric:tabular-nums;width:7ch}.archive .archive__name{color:var(--text)}.archive .archive__links{text-align:right;white-space:nowrap}.archive .archive__links a{min-height:44px;color:var(--text-muted);transition:color var(--fast)var(--ease);align-items:center;padding-inline:8px;display:inline-flex}.archive .archive__links a:hover{color:var(--accent)}@media (max-width:719px){.archive thead{display:none}.archive tr{border-bottom:1px solid var(--border);grid-template-columns:7ch 1fr;padding-block:12px;display:grid}.archive td{border:0;padding:2px 0}.archive td:first-child{grid-row:span 3}.archive .archive__links{text-align:left}.archive .archive__links a{padding-inline:0 16px}}.contact{gap:clamp(40px,6vw,64px);display:grid}.contact__title{letter-spacing:-.04em;max-width:18ch;font-size:clamp(1.75rem,3.6vw,2.75rem)}.link-list{border-top:1px solid var(--border);padding:0;list-style:none}.link-list a,.link-list>li>span{border-bottom:1px solid var(--border);min-height:56px;transition:color var(--fast)var(--ease);justify-content:space-between;align-items:center;gap:16px;display:flex}.link-list a:hover,.link-list a:focus-visible{color:var(--accent)}.link-list a>span:first-child{overflow-wrap:anywhere;min-width:0}.link-list .muted{font-size:var(--fs-small);margin-left:1ch}@media (min-width:900px){.contact{grid-template-columns:1.2fr 1fr;align-items:end}}.site-footer{border-top:1px solid var(--border);font-size:var(--fs-small);padding-block:40px 32px}.site-footer__grid{gap:16px;display:grid}.site-footer ul{flex-wrap:wrap;gap:0 20px;padding:0;list-style:none;display:flex}.site-footer__links a{min-height:44px;color:var(--text-secondary);transition:color var(--fast)var(--ease);align-items:center;gap:.6ch;display:inline-flex}.site-footer__links a:hover{color:var(--text)}.site-footer__small{color:var(--text-muted);flex-wrap:wrap;justify-content:space-between;gap:8px 24px;margin-top:24px;display:flex}@media (min-width:900px){.site-footer__grid{grid-template-columns:1fr auto auto;align-items:center;gap:48px}}.page-head{gap:20px;padding-top:clamp(4rem,10vw,7.5rem);display:grid}.page-head__title{font-size:var(--fs-page);letter-spacing:-.045em;overflow-wrap:anywhere;font-weight:600;line-height:1.05}.pager{margin-block:clamp(64px,9vw,120px)var(--section);border-top:1px solid var(--border);gap:16px;padding-top:24px;display:grid}.pager a{gap:4px;min-height:44px;display:grid}.pager strong{font-size:var(--fs-h3);transition:color var(--fast)var(--ease);font-weight:600}.pager a:hover strong{color:var(--accent)}@media (min-width:900px){.pager{grid-template-columns:1fr 1fr}.pager a:last-child{text-align:right}}.article-head{max-width:900px;padding-top:clamp(4rem,10vw,7.5rem)}.article-head h1{letter-spacing:-.04em;margin-top:16px;font-size:clamp(1.875rem,4.2vw,3.1rem);line-height:1.1}.article-head .lead{margin-top:20px}.prose{color:#d5d9de;max-width:68ch;margin-top:clamp(48px,7vw,80px);line-height:1.85}.prose>*+*{margin-top:1.4em}.prose h2{color:var(--text);margin-top:2.6em;font-size:clamp(1.2rem,2vw,1.45rem)}.prose :not(pre)>code{background:var(--surface);color:var(--text);overflow-wrap:anywhere;border-radius:4px;padding:.1em .35em;font-size:.9em}.prose pre{border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--bg-2);color:var(--text);scrollbar-color:#33383f transparent;scrollbar-width:thin;padding:40px 20px 20px;font-size:.875rem;line-height:1.7;position:relative;overflow-x:auto}.prose pre:before{content:attr(data-lang);font-size:var(--fs-tiny);color:var(--text-muted);position:absolute;top:12px;left:20px}.prose strong{color:var(--text)}.prose ul{padding-left:1.2em}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.rise{animation:rise .6s var(--ease)both;animation-delay:var(--d,0s)}@supports (animation-timeline:view()){.reveal{animation:linear both rise;animation-timeline:view();animation-range:entry entry 30%}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:0s!important;animation:none!important}}
