:root{--bg:#0b0d0e;--panel:#101314;--panel-2:#14181a;--sunk:#0d1011;--rule:#1e2426;--rule-2:#2b3336;--rule-3:#3d464a;--fg:#d7dee0;--dim-1:#93a0a4;--dim-2:#78868a;--dim-3:#707e82;--accent:#7fd1b9;--accent-dim:#4e8f7d;--amber:#e5c07b;--violet:#c39bd3;--red:#f0736a;--blue:#6fa8dc;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--font-ui:"Inter Tight", "Inter", system-ui, sans-serif;--fs-body:.9375rem;--lh-body:1.68;--fs-sm:.8125rem;--fs-xs:.6875rem;--fs-2xs:.625rem;--fs-display:clamp(2rem, 5.6vw, 4rem);--page-max:1240px;--margin:clamp(16px, 4vw, 52px);--gutter:20px;--cols:12;--sidebar:15rem;--radius:4px;--ease:cubic-bezier(.2, .6, .2, 1)}#pagemain{view-transition-name:pagemain}.topbar{view-transition-name:topbar}::view-transition-old(root),::view-transition-new(root){animation-duration:.18s;animation-timing-function:var(--ease)}::view-transition-old(topbar),::view-transition-new(topbar){animation-duration:.12s}@keyframes vt-slide-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes vt-slide-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-8px)}}::view-transition-old(pagemain){animation:.16s var(--ease) both vt-slide-out}::view-transition-new(pagemain){animation:.22s var(--ease) both vt-slide-in}::view-transition-old(proj-name-),::view-transition-new(proj-name-),::view-transition-old(proj-tag-),::view-transition-new(proj-tag-),::view-transition-old(post-title-),::view-transition-new(post-title-){animation-duration:.3s;animation-timing-function:var(--ease)}::view-transition-old(post-cover-),::view-transition-new(post-cover-){animation-duration:.35s;animation-timing-function:var(--ease)}@media (prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root),::view-transition-old(pagemain),::view-transition-new(pagemain){animation:none}}.scanlines{z-index:100;pointer-events:none;background-image:repeating-linear-gradient(#ffffff04 0 1px,#0000 1px 3px);position:fixed;inset:0}.vignette{z-index:99;pointer-events:none;background:radial-gradient(130% 100% at 50% 45%,#0000 55%,#00000080 100%);position:fixed;inset:0}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--font-mono);font-size:var(--fs-body);line-height:var(--lh-body);font-variant-ligatures:none;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0}h1,h2,h3,h4,p,figure,blockquote,ul,ol,dl,pre{margin:0}ul,ol{padding:0;list-style:none}img,svg{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}::selection{background:var(--accent);color:#06231c}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.shell{max-width:var(--page-max);padding-inline:var(--margin);margin-inline:auto}.grid12{grid-template-columns:repeat(var(--cols), minmax(0, 1fr));gap:0 var(--gutter);display:grid}.label{font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:.12em;text-transform:uppercase;color:var(--dim-2)}.prompt{color:var(--accent);user-select:none}.cursor{background:var(--accent);vertical-align:middle;width:8px;height:.85em;margin-left:3px;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.topbar{z-index:60;background:color-mix(in srgb, var(--bg) 92%, transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule);position:sticky;top:0}.topbar__inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;min-height:46px;padding-block:11px;display:flex}.topbar__brand{font-size:var(--fs-sm);flex:0 auto;align-items:baseline;gap:9px;min-width:0;padding-block:6px;display:flex}.topbar__brand b{white-space:nowrap;flex:none}.topbar__brand span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topbar__brand b{color:var(--fg);font-weight:500}.topbar__brand span{color:var(--dim-2);font-size:var(--fs-xs)}.topbar__nav{align-items:center;gap:3px;display:flex}.topbar__nav a,.topbar__nav button{font-size:var(--fs-xs);letter-spacing:.05em;color:var(--dim-1);border-radius:var(--radius);transition:color .15s var(--ease), background-color .15s var(--ease);white-space:nowrap;padding:7px 10px}.topbar__nav a:hover,.topbar__nav button:hover{color:var(--fg);background:var(--panel-2)}.topbar__nav a[aria-current=page]{color:var(--accent)}.topbar__toggle{font-size:var(--fs-2xs);border:1px solid var(--rule-2)}.layout{grid-template-columns:var(--sidebar) minmax(0, 1fr);align-items:start;gap:0;display:grid}.sidebar{border-right:1px solid var(--rule);height:calc(100dvh - 46px);font-size:var(--fs-sm);padding:24px 20px 40px 0;position:sticky;top:46px;overflow-y:auto}.sidebar__head{font-size:var(--fs-2xs);letter-spacing:.12em;text-transform:uppercase;color:var(--dim-3);margin-bottom:10px;padding:0 8px}.sidebar__group{margin-bottom:26px}.tree{border-left:1px solid var(--rule);margin-left:8px;padding-left:12px}.tree li{margin-bottom:2px}.tree a{border-radius:var(--radius);color:var(--dim-1);transition:color .14s var(--ease), background-color .14s var(--ease);grid-template-columns:10rem minmax(0,1fr);align-items:baseline;gap:10px;padding:5px 8px;display:grid}.tree a:hover{color:var(--fg);background:var(--panel)}.tree a[aria-current=page]{color:var(--bg);background:var(--accent)}.tree a[aria-current=page] .tree__meta{color:#0b0d0e9e}.tree__name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tree__meta{font-size:var(--fs-2xs);color:var(--dim-3);text-align:right;white-space:nowrap}.content{min-width:0;padding:28px 0 72px 32px}.panel{background:var(--panel);border:1px solid var(--rule);border-radius:var(--radius)}.panel__bar{border-bottom:1px solid var(--rule);background:var(--panel-2);border-radius:var(--radius) var(--radius) 0 0;font-size:var(--fs-2xs);letter-spacing:.1em;text-transform:uppercase;color:var(--dim-2);align-items:center;gap:10px;padding:8px 12px;display:flex}.panel__bar .dot{background:var(--rule-3);border-radius:50%;flex:none;width:7px;height:7px}.panel__bar .dot:first-child{background:var(--accent-dim)}.panel__body{padding:18px 20px}.term{border:1px solid var(--rule);border-radius:var(--radius);background:var(--sunk);overflow:hidden}.term__bar{border-bottom:1px solid var(--rule);background:var(--panel);font-size:var(--fs-2xs);color:var(--dim-2);align-items:center;gap:8px;padding:7px 12px;display:flex}.term__dots{gap:5px;display:flex}.term__dots i{background:var(--rule-3);border-radius:50%;width:9px;height:9px}.term__dots i:first-child{background:var(--red)}.term__dots i:nth-child(2){background:var(--amber)}.term__dots i:nth-child(3){background:var(--accent)}.term__title{color:var(--dim-2);margin-left:4px}.term__body{font-size:var(--fs-sm);padding:16px 18px 20px;line-height:1.75}.term__line{gap:10px;margin-bottom:5px;display:flex}.term__line span:first-child{color:var(--accent);user-select:none;flex:none}.term__line b{color:var(--fg);font-weight:400}.term__line em{color:var(--amber);font-style:normal}.term__out{color:var(--dim-1);margin-bottom:12px;padding-left:22px}.term__out .k{color:var(--dim-2);min-width:8ch;display:inline-block}.stats{background:var(--rule);border:1px solid var(--rule);border-radius:var(--radius);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:1px;display:grid;overflow:hidden}.stats div{background:var(--panel);padding:14px 16px}.stats dt{font-size:var(--fs-2xs);letter-spacing:.1em;text-transform:uppercase;color:var(--dim-3)}.stats dd{letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--accent);margin:5px 0 0;font-size:1.5rem;line-height:1.1}.section{margin-top:40px}.section__head{border-bottom:1px solid var(--rule-2);align-items:baseline;gap:14px;margin-bottom:16px;padding-bottom:9px;display:flex}.section__head h2{font-size:var(--fs-sm);letter-spacing:.04em;color:var(--fg);font-weight:500}.section__head h2:before{content:"## ";color:var(--accent-dim)}.section__head .count{font-size:var(--fs-2xs);color:var(--dim-3);margin-left:auto}.rows{border-top:1px solid var(--rule)}.row{border-bottom:1px solid var(--rule);transition:background-color .14s var(--ease);grid-template-columns:3.5rem minmax(0,1fr) auto;align-items:baseline;gap:0 16px;padding:14px 10px;display:grid}.row:hover{background:var(--panel)}.row:hover .row__name{color:var(--accent)}.row__idx{font-size:var(--fs-2xs);color:var(--dim-3);padding-top:3px}.row__name{font-size:var(--fs-body);color:var(--fg);letter-spacing:-.005em;transition:color .14s var(--ease)}.row__name:after{content:" ↗";font-size:var(--fs-xs);color:var(--dim-3);opacity:0;transition:opacity .14s var(--ease)}.row:hover .row__name:after{opacity:1}.row__desc{font-size:var(--fs-xs);color:var(--dim-2);margin-top:3px;line-height:1.6}.row__meta{font-size:var(--fs-2xs);color:var(--dim-3);text-align:right;white-space:nowrap}.row__lang{color:var(--amber)}.prose{max-width:68ch;font-size:var(--fs-body);overflow-wrap:break-word;min-width:0}.prose>*+*{margin-top:1.15em}.prose>pre,.prose>.codeblock,.prose>table,.prose>blockquote{max-width:100%}.prose table{border-collapse:collapse;display:block;overflow-x:auto}.prose h2{font-family:var(--font-mono);letter-spacing:.02em;border-bottom:1px solid var(--rule);margin-top:2.2em;padding-bottom:7px;font-size:.9375rem;font-weight:500}.prose h2:before{content:"## ";color:var(--accent-dim)}.prose h3{font-size:var(--fs-sm);color:var(--fg);margin-top:1.9em;font-weight:500}.prose h3:before{content:"### ";color:var(--dim-3)}.prose p{color:var(--dim-1)}.prose strong{color:var(--fg);font-weight:500}.prose ul{list-style:none}.prose ul li{color:var(--dim-1);padding-left:1.5em;position:relative}.prose ul li:before{content:"▸";color:var(--accent-dim);position:absolute;left:0}.prose a{color:var(--accent);border-bottom:1px solid var(--accent-dim)}.prose a:hover{background:#7fd1b91a}.prose blockquote{border-left:2px solid var(--rule-3);color:var(--dim-2);padding-left:1em}.prose hr{border:0;border-top:1px solid var(--rule);margin:2em 0}.prose :not(pre)>code{font-family:var(--font-mono);background:var(--panel-2);border:1px solid var(--rule);color:var(--amber);border-radius:3px;padding:.1em .35em;font-size:.875em}.codeblock{border:1px solid var(--rule);border-radius:var(--radius);background:var(--sunk);margin:1.5em 0;overflow:hidden}.codeblock__bar{border-bottom:1px solid var(--rule);background:var(--panel);font-size:var(--fs-2xs);color:var(--dim-2);letter-spacing:.06em;align-items:center;gap:8px;padding:6px 11px;display:flex}.codeblock__lang{color:var(--violet);text-transform:uppercase}.codeblock__file{color:var(--dim-3)}.codeblock__copy{font-size:var(--fs-2xs);color:var(--dim-2);border:1px solid var(--rule-2);transition:color .14s var(--ease), border-color .14s var(--ease);border-radius:3px;margin-left:auto;padding:3px 8px}.codeblock__copy:hover{color:var(--accent);border-color:var(--accent-dim)}.codeblock pre{max-width:100%;font-size:var(--fs-sm);margin:0;padding:14px 16px;line-height:1.68;overflow:auto hidden;background:0 0!important}.codeblock pre code{width:max-content;min-width:100%;font-family:var(--font-mono);border:0;padding:0;display:block;background:0 0!important}.codeblock pre .line{max-width:100%}.codeblock .line{width:100%;max-width:100%;display:inline-block}.codeblock .line.highlighted{box-shadow:inset 2px 0 0 var(--accent);background:#7fd1b914;width:calc(100% + 32px);margin-inline:-16px;padding-inline:16px}.codeblock .line.diff.add{box-shadow:inset 2px 0 0 var(--accent);background:#7fd1b91a;width:calc(100% + 32px);margin-inline:-16px;padding-inline:16px}.codeblock .line.diff.remove{box-shadow:inset 2px 0 0 var(--red);opacity:.75;background:#f0736a1a;width:calc(100% + 32px);margin-inline:-16px;padding-inline:16px}.post-cover{border-radius:var(--radius);border:1px solid var(--rule);margin:0 0 28px;line-height:0;overflow:hidden}.post-cover img{object-fit:cover;object-position:left top;width:100%;height:auto;max-height:340px;display:block}.row__thumb{border:1px solid var(--rule);border-radius:3px;flex-shrink:0;width:88px;height:46px;margin-left:auto;line-height:0;overflow:hidden}.row__thumb img{object-fit:cover;object-position:left top;width:100%;height:100%;transition:opacity .18s;display:block}.row:hover .row__thumb img{opacity:.8}@media (width<=480px){.row__thumb{display:none}}.posthead{border:1px solid var(--rule);border-left:2px solid var(--accent);border-radius:var(--radius);background:var(--panel);margin-bottom:28px;padding:18px 20px}.posthead h1{letter-spacing:-.02em;text-wrap:pretty;font-size:1.5rem;font-weight:500;line-height:1.25}.posthead__meta{font-size:var(--fs-2xs);color:var(--dim-3);letter-spacing:.06em;flex-wrap:wrap;gap:6px 16px;margin-top:10px;display:flex}.posthead__meta .tag{color:var(--violet)}.taglist{flex-wrap:wrap;gap:8px;display:flex}.taglist a{font-size:var(--fs-2xs);letter-spacing:.06em;color:var(--dim-1);border:1px solid var(--rule-2);transition:color .14s var(--ease), border-color .14s var(--ease);border-radius:999px;padding:5px 10px}.taglist a:hover{color:var(--accent);border-color:var(--accent-dim)}#load-progress{background:var(--accent);z-index:200;opacity:0;pointer-events:none;width:0%;height:2px;transition:width 80ms linear,opacity .3s;position:fixed;top:0;left:0}#load-progress.is-active{opacity:1}#load-progress.is-done{opacity:0;transition:width .1s linear,opacity .4s 50ms}.pager{border-top:1px solid var(--rule);font-size:var(--fs-xs);justify-content:space-between;gap:16px;margin-top:44px;padding-top:16px;display:flex}.pager a{color:var(--dim-1);max-width:46%}.pager a:hover{color:var(--accent)}.pager .next{text-align:right;margin-left:auto}.footer{border-top:1px solid var(--rule);font-size:var(--fs-2xs);color:var(--dim-3);letter-spacing:.06em;padding:24px 0 48px}.footer__inner{flex-wrap:wrap;justify-content:space-between;gap:10px 24px;display:flex}.footer a{color:var(--dim-2);padding:4px 2px;display:inline-block}.footer a:hover{color:var(--accent)}@view-transition{navigation:auto}::view-transition-old(root){animation:.17s cubic-bezier(.4,0,1,1) both vt-out}::view-transition-new(root){animation:.24s cubic-bezier(0,0,.2,1) both vt-in}@keyframes vt-out{to{opacity:0;transform:translateY(-5px)}}@keyframes vt-in{0%{opacity:0;transform:translateY(7px)}}::view-transition-group(pagemain){animation-duration:.26s}@media (width<=1080px){.layout{grid-template-columns:1fr}.sidebar{border-right:0;border-top:1px solid var(--rule);border-bottom:0;order:2;height:auto;max-height:none;padding:22px 0 8px;position:static}.content{order:1;padding:24px 0 32px}.sidebar__group{margin-bottom:0}.sidebar>.sidebar__group+.sidebar__group{margin-top:18px}.tree{columns:2;column-gap:28px}.tree li{break-inside:avoid}}@media (width<=900px){.row{grid-template-columns:2.5rem minmax(0,1fr)}.row__meta{text-align:left;grid-column:2;margin-top:6px}}@media (width<=620px){:root{--margin:14px}.tree{columns:1}.topbar__brand span{display:none}.topbar__inner{gap:4px 12px;padding-block:7px}.topbar__brand{font-size:var(--fs-body);padding-block:2px}.topbar__nav{justify-content:space-between;gap:2px;width:100%}.topbar__nav a{text-align:center;flex:auto;padding:12px 6px}.footer a{padding:9px 2px;display:inline-block}.footer__inner{gap:6px 20px}.section__head a.count{padding:10px 4px}.pager a{padding:11px 0}.tree a{padding:9px 8px}.row{padding:16px 6px}.stats dd{font-size:1.25rem}.term__body{font-size:var(--fs-xs);padding:12px 14px 16px;line-height:1.6}.term__line{margin-bottom:3px}.term__out{margin-bottom:9px;padding-left:14px}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.posthead{padding:14px 16px}.posthead h1{font-size:1.25rem}.term__body,.panel__body{padding:14px 14px 16px}.codeblock pre{font-size:var(--fs-xs)}.pager{flex-direction:column;gap:14px}.pager a{max-width:100%}.pager .next{text-align:left}}@media (width<=420px){:root{--fs-body:.875rem}.stats{grid-template-columns:1fr}.row{grid-template-columns:2rem minmax(0,1fr);gap:0 10px}}@media (prefers-reduced-motion:reduce){.cursor,::view-transition-old(root),::view-transition-new(root){animation:none}*,:before,:after{transition-duration:.01ms!important}}@media print{.topbar,.footer,.scanlines,.vignette,.sidebar{display:none!important}:root{--bg:#fff;--fg:#0a0a0a;--dim-1:#333;--dim-2:#555;--dim-3:#777;--accent:#0a6e5c;--rule:#ccc;--surface:#f5f5f5;--panel:#f5f5f5}html,body{color:#0a0a0a!important;background:#fff!important}.layout{grid-template-columns:unset!important;display:block!important}.content{padding:0!important}.shell{max-width:100%!important;padding-inline:0!important}a[href^=http]:after{content:" (" attr(href) ")";color:#777;word-break:break-all;font-size:.7em}.cv-btn:after,.cv-contact a:after,.cv-link:after{content:none!important}.cv-actions{display:none!important}.cv-cert{grid-template-columns:1fr auto!important}.cv-section,.cv-entry{page-break-inside:avoid}*{box-shadow:none!important;text-shadow:none!important}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-400.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/jetbrains-mono-500.woff2)format("woff2")}@font-face{font-family:Inter Tight;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/inter-tight-400.woff2)format("woff2")}@font-face{font-family:Inter Tight;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/inter-tight-500.woff2)format("woff2")}
