@font-face{font-family:space grotesk;src:url(/fonts/space-grotesk-latin-wght-normal.woff2)format("woff2");font-weight:300 700;font-style:normal;font-display:swap}@font-face{font-family:jetbrains mono;src:url(/fonts/jetbrains-mono-latin-wght-normal.woff2)format("woff2");font-weight:100 800;font-style:normal;font-display:swap}:root{--background:219 45% 8%;--foreground:219 40% 93%;--card:220 40% 10%;--primary:193 72% 66%;--primary-foreground:220 45% 10%;--secondary:219 32% 16%;--secondary-foreground:217 28% 82%;--muted:219 32% 15%;--muted-foreground:216 20% 65%;--accent:219 32% 18%;--border:218 28% 21%;--radius:0.625rem;--signal:193 72% 66%;--amber:38 82% 65%;--ok:140 55% 60%;--font-sans:"Space Grotesk", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--content:42rem;color-scheme:dark}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:1.5rem}body{margin:0;font-family:var(--font-sans);font-size:1rem;line-height:1.5;color:hsl(var(--foreground));background-color:hsl(var(--background));background-image:radial-gradient(hsl(219 35% 20%/.55) 1px,transparent 1px);background-size:26px 26px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:hsl(var(--signal)/.3)}a{color:inherit;text-decoration:none}a:focus-visible,summary:focus-visible,button:focus-visible{outline:2px solid hsl(var(--signal));outline-offset:2px;border-radius:4px}img{max-width:100%;height:auto;display:block}h1,h2,h3,h4{line-height:1.2;letter-spacing:-.02em}.text-signal{color:hsl(var(--signal))}.muted{color:hsl(var(--muted-foreground))}.skip-link{position:absolute;left:-9999px}.skip-link:focus{left:1rem;top:1rem;z-index:10;padding:.5rem .75rem;background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:6px}.container{max-width:56rem;margin:0 auto;padding:2.5rem 1rem;display:flex;flex-direction:column;gap:3.5rem;min-height:100vh}@media(min-width:640px){.container{padding-inline:1.5rem}}main{display:flex;flex-direction:column;gap:3.5rem;flex:1}.panel{border:1px solid hsl(var(--border));border-radius:var(--radius);background:hsl(var(--card)/.7);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.eyebrow{margin:0 0 1rem;font-family:var(--font-mono);font-size:.875rem;text-transform:uppercase;letter-spacing:.18em;color:hsl(var(--muted-foreground))}.eyebrow a:hover{color:hsl(var(--signal))}.status-dot{display:inline-block;width:.5rem;height:.5rem;flex-shrink:0;border-radius:999px;background:hsl(var(--signal))}.status-dot.is-draft{background:hsl(var(--amber))}.btn{display:inline-flex;align-items:center;gap:.5rem;height:2.5rem;padding:0 1rem;border:1px solid transparent;border-radius:calc(var(--radius) - 2px);font-size:.875rem;font-weight:500;background:hsl(var(--primary));color:hsl(var(--primary-foreground));transition:background-color .15s,border-color .15s,color .15s}.btn:hover{background:hsl(var(--primary)/.9)}.btn-outline{background:hsl(var(--background));color:hsl(var(--foreground));border-color:hsl(var(--border))}.btn-outline:hover{background:hsl(var(--accent))}.badge{display:inline-block;padding:.1rem .45rem;border-radius:999px;font-family:var(--font-mono);font-size:.7rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;vertical-align:middle}.badge-draft{color:hsl(var(--amber));border:1px dashed hsl(var(--amber)/.6)}.chip{display:inline-flex;gap:.35rem;padding:.2rem .65rem;border-radius:999px;background:hsl(var(--secondary));color:hsl(var(--secondary-foreground));font-size:.875rem;transition:color .15s}.chip:hover{color:hsl(var(--signal))}.tags{display:flex;flex-wrap:wrap;gap:.5rem}.topbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem}.topbar-host{font-family:var(--font-mono);font-size:.875rem;color:hsl(var(--muted-foreground));transition:color .15s}.topbar-host:hover{color:hsl(var(--foreground))}.topbar-nav{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem 1.25rem;font-size:.9375rem}.topbar-nav>a{color:hsl(var(--muted-foreground));transition:color .15s}.topbar-nav>a:hover,.topbar-nav>a[aria-current]{color:hsl(var(--foreground))}.topbar-nav>a[aria-current]{text-decoration:underline;text-decoration-color:hsl(var(--signal));text-underline-offset:6px}@media(max-width:480px){.topbar-main{display:none}}.lang-switch{display:flex;overflow:hidden;border:1px solid hsl(var(--border));border-radius:calc(var(--radius) - 2px);font-family:var(--font-mono);font-size:.875rem}.lang-switch>*{padding:.375rem .75rem;letter-spacing:.05em}.lang-switch a{color:hsl(var(--muted-foreground));transition:color .15s}.lang-switch a:hover{color:hsl(var(--foreground))}.lang-switch .is-active{background:hsl(var(--secondary));color:hsl(var(--signal))}.hero-head{display:flex;align-items:center;justify-content:space-between;gap:1rem}.hero-text{min-width:0}.hero h1,.page-head h1{margin:0;font-size:2.25rem;font-weight:700;letter-spacing:-.025em}@media(min-width:640px){.hero h1{font-size:3rem}}.hero-sub{margin:.75rem 0 0;font-size:1.125rem;color:hsl(var(--muted-foreground))}.avatar{width:6rem;height:6rem;flex-shrink:0;object-fit:cover;border:1px solid hsl(var(--border));border-radius:var(--radius);box-shadow:0 10px 15px -3px rgb(0 0 0/.3)}@media(min-width:640px){.avatar{width:9rem;height:9rem}}.terminal{margin-top:1.5rem;padding:1rem;overflow-x:auto;font-family:var(--font-mono);font-size:.9375rem;line-height:2}.terminal p{margin:0}.terminal .prompt{color:hsl(var(--muted-foreground))}.terminal-out{color:hsl(var(--secondary-foreground));line-height:1.6;padding-block:.2rem}.terminal-dirs{color:hsl(var(--signal))}.terminal-dirs a{margin-right:.6em}.terminal-dirs a:hover{text-decoration:underline;text-underline-offset:4px}.terminal-cursor{display:inline-block;width:.5rem;height:1rem;transform:translateY(.125rem);background:hsl(var(--signal));animation:cursor-blink 1.1s steps(1)infinite}@keyframes cursor-blink{0%,49%{opacity:1}50%,100%{opacity:0}}.hero-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:1.5rem}.section>.eyebrow{margin-bottom:1rem}.featured{display:grid;overflow:hidden;transition:border-color .15s}.featured:hover{border-color:hsl(var(--signal)/.4)}@media(min-width:720px){.featured{grid-template-columns:2fr 3fr}}.featured-img{width:100%;height:100%;min-height:12rem;object-fit:cover;border-bottom:1px solid hsl(var(--border))}@media(min-width:720px){.featured-img{border-bottom:0;border-right:1px solid hsl(var(--border))}}.featured-body{padding:1.5rem;display:flex;flex-direction:column}.featured-topic{margin:0 0 .5rem;font-family:var(--font-mono);font-size:.8125rem;text-transform:uppercase;letter-spacing:.14em;color:hsl(var(--signal))}.featured-title{margin:0;font-size:1.5rem;font-weight:600}.featured-desc{margin:.75rem 0 0;color:hsl(var(--secondary-foreground));line-height:1.6}.featured .meta{margin-top:auto;padding-top:1rem}.rows{list-style:none;margin:0;padding:0}.row+.row{border-top:1px solid hsl(var(--border))}.row-link{display:grid;grid-template-columns:1fr auto;gap:.25rem 1rem;padding:.9rem 1.25rem;transition:background-color .15s}.row-link:hover{background:hsl(var(--accent)/.5)}.row:first-child .row-link{border-radius:var(--radius)var(--radius)0 0}.row:last-child .row-link{border-radius:0 0 var(--radius)var(--radius)}.row:only-child .row-link{border-radius:var(--radius)}.row-topic{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.12em;color:hsl(var(--muted-foreground))}.row-body{grid-column:1/-1;display:flex;flex-direction:column;gap:.2rem;min-width:0}.row-title{font-weight:500;color:hsl(var(--foreground))}.row-link:hover .row-title{color:hsl(var(--signal))}.row-desc{font-size:.9375rem;color:hsl(var(--muted-foreground));display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.row-date{grid-column:2;grid-row:1;font-family:var(--font-mono);font-size:.8125rem;color:hsl(var(--muted-foreground))}@media(min-width:720px){.row-link{grid-template-columns:11rem 1fr auto;align-items:baseline}.row-body{grid-column:2;grid-row:1}.row-date{grid-column:3}}.topic-grid{display:grid;gap:1rem}@media(min-width:640px){.topic-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:900px){.topic-grid{grid-template-columns:repeat(3,1fr)}}.topic{display:flex;flex-direction:column;gap:.4rem;padding:1.1rem 1.25rem;transition:border-color .15s}.topic:hover{border-color:hsl(var(--signal)/.4)}.topic-name{display:inline-flex;align-items:center;gap:.6rem;font-weight:500}.topic-desc{font-size:.875rem;color:hsl(var(--muted-foreground));line-height:1.5}.topic-count{margin-top:auto;padding-top:.25rem;font-family:var(--font-mono);font-size:.8125rem;color:hsl(var(--signal))}.topic.is-empty{border-style:dashed;border-color:hsl(var(--amber)/.4)}.topic.is-empty .status-dot{background:hsl(var(--amber))}.topic.is-empty .topic-count{color:hsl(var(--amber))}.page-head .lede{margin-top:.75rem}.page-head .terminal{margin-top:1.5rem}.eyebrow.year{color:hsl(var(--signal))}.section+.section{margin-top:-1rem}.empty{padding:1.25rem;color:hsl(var(--muted-foreground))}.empty p{margin:0;display:flex;align-items:center;gap:.6rem}.tags-cloud .chip .muted{font-family:var(--font-mono);font-size:.75rem}.back{display:inline-block;margin-bottom:1.5rem;font-family:var(--font-mono);font-size:.875rem;color:hsl(var(--muted-foreground));transition:color .15s}.back:hover{color:hsl(var(--signal))}.article-head h1{margin:0;font-size:2rem;font-weight:700;letter-spacing:-.025em;max-width:44rem}@media(min-width:640px){.article-head h1{font-size:2.5rem}}.lede{margin:1rem 0 0;max-width:var(--content);font-size:1.125rem;line-height:1.6;color:hsl(var(--muted-foreground))}.meta{display:flex;flex-wrap:wrap;gap:.25rem .5rem;margin:1.25rem 0 0;font-family:var(--font-mono);font-size:.8125rem;color:hsl(var(--muted-foreground))}.meta .sep{color:hsl(var(--border))}.translation{margin:.75rem 0 0;font-size:.875rem}.translation a{color:hsl(var(--signal))}.translation a:hover{text-decoration:underline;text-underline-offset:4px}.article-hero{margin:2.5rem 0 0;overflow:hidden}.article-hero img{width:100%;max-height:28rem;object-fit:cover}.article-layout{margin-top:2.5rem}@media(min-width:1100px){.article-layout.has-toc{display:grid;grid-template-columns:minmax(0,1fr)13rem;gap:3rem}.article-layout.has-toc .toc{grid-column:2;grid-row:1}.toc-panel{position:sticky;top:1.5rem;max-height:calc(100vh - 3rem);overflow-y:auto}}.toc{margin-bottom:2rem}.toc-panel{padding:1rem 1.1rem;font-size:.875rem}.toc-panel summary{margin:0;cursor:pointer;list-style:none;font-size:.8125rem}.toc-panel summary::-webkit-details-marker{display:none}.toc-panel[open] summary{margin-bottom:.75rem}.toc-panel ul{list-style:none;margin:0;padding:0}.toc-panel ul ul{padding-left:.85rem;border-left:1px solid hsl(var(--border));margin:.2rem 0 .2rem .2rem}.toc-panel li{margin:.3rem 0;line-height:1.35}.toc-panel a{color:hsl(var(--muted-foreground));transition:color .15s}.toc-panel a:hover,.toc-panel a.is-active{color:hsl(var(--signal))}.prose{max-width:var(--content);font-size:1.0625rem;line-height:1.75;color:hsl(var(--secondary-foreground));overflow-wrap:break-word}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol,.prose blockquote,.prose .figure,.prose .table-wrap,.prose .highlight,.prose>pre,.prose .callout{margin:0 0 1.35rem}.prose h2,.prose h3,.prose h4{color:hsl(var(--foreground));font-weight:600;scroll-margin-top:1.5rem}.prose h2{margin:3rem 0 1rem;padding-top:1.5rem;border-top:1px solid hsl(var(--border)/.7);font-size:1.5rem}.prose h3{margin:2.25rem 0 .75rem;font-size:1.2rem}.prose h4{margin:1.75rem 0 .5rem;font-size:1.05rem}.prose .anchor{margin-left:.25rem;font-family:var(--font-mono);font-weight:400;color:hsl(var(--signal));opacity:0;transition:opacity .15s}.prose :is(h2,h3,h4):hover .anchor,.prose .anchor:focus-visible{opacity:.8}.prose a{color:hsl(var(--signal));text-decoration:underline;text-decoration-color:hsl(var(--signal)/.4);text-underline-offset:3px;transition:text-decoration-color .15s}.prose a:hover{text-decoration-color:hsl(var(--signal))}.prose .figure-link,.prose a.anchor{text-decoration:none}.prose strong{color:hsl(var(--foreground));font-weight:600}.prose ul,.prose ol{padding-left:1.4rem}.prose li{margin:.35rem 0}.prose li::marker{color:hsl(var(--signal))}.prose hr{margin:2.5rem 0;border:0;border-top:1px solid hsl(var(--border))}.prose blockquote{padding:.25rem 0 .25rem 1.1rem;border-left:2px solid hsl(var(--signal)/.6);color:hsl(var(--muted-foreground));font-style:normal}.prose blockquote p:last-child{margin-bottom:0}.prose code{font-family:var(--font-mono);font-size:.875em;padding:.1em .35em;border-radius:4px;background:hsl(var(--secondary));color:hsl(var(--foreground))}.prose pre{position:relative;margin:0;padding:1rem 1.1rem;overflow-x:auto;border:1px solid hsl(var(--border));border-radius:var(--radius);background:#080c16!important;font-size:.875rem;line-height:1.65;scrollbar-color:hsl(var(--border))transparent;scrollbar-width:thin}.prose pre code{padding:0;background:0 0;font-size:inherit;color:inherit}.highlight{position:relative}.copy-btn{position:absolute;top:.5rem;right:.5rem;padding:.2rem .55rem;border:1px solid hsl(var(--border));border-radius:6px;background:hsl(var(--card));color:hsl(var(--muted-foreground));font-family:var(--font-mono);font-size:.75rem;cursor:pointer;opacity:0;transition:opacity .15s,color .15s}.highlight:hover .copy-btn,.copy-btn:focus-visible{opacity:1}@media(hover:none){.copy-btn{opacity:1}.highlight pre{padding-top:2.5rem}}.copy-btn:hover,.copy-btn.is-done{color:hsl(var(--ok))}.figure{margin-inline:0}.figure img,.prose .figure-link img{border:1px solid hsl(var(--border));border-radius:var(--radius)}.prose p .figure-link{display:block;margin:.5rem 0}.figure figcaption{margin-top:.6rem;font-family:var(--font-mono);font-size:.8125rem;color:hsl(var(--muted-foreground))}.table-wrap{overflow-x:auto;scrollbar-color:hsl(var(--border))transparent;scrollbar-width:thin;border:1px solid hsl(var(--border));border-radius:var(--radius);background:hsl(var(--card)/.7)}.prose table{width:100%;border-collapse:collapse;font-size:.9rem;line-height:1.5}.prose th,.prose td{padding:.6rem .9rem;text-align:left;vertical-align:top;border-bottom:1px solid hsl(var(--border))}.prose tr:last-child td{border-bottom:0}.prose th{font-family:var(--font-mono);font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.1em;color:hsl(var(--muted-foreground));background:hsl(var(--secondary)/.5);white-space:nowrap}.callout{padding:1rem 1.2rem;border:1px solid hsl(var(--border));border-left:3px solid hsl(var(--signal));border-radius:var(--radius);background:hsl(var(--card)/.7);font-size:1rem;line-height:1.65}.callout-title{margin:0 0 .5rem!important;font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.16em;color:hsl(var(--signal))}.callout-body>:last-child{margin-bottom:0}.callout-warning{border-left-color:hsl(var(--amber))}.callout-warning .callout-title{color:hsl(var(--amber))}.callout-result{border-left-color:hsl(var(--ok))}.callout-result .callout-title{color:hsl(var(--ok))}.callout-todo{border-style:dashed;border-left-style:solid;border-left-color:hsl(var(--amber))}.callout-todo .callout-title{color:hsl(var(--amber))}.callout-setup ul,.callout-result ul{list-style:none;padding:0;margin:0;font-family:var(--font-mono);font-size:.875rem}.callout-setup li,.callout-result li{display:flex;align-items:baseline;gap:.6rem;margin:.25rem 0}.callout-setup li::before,.callout-result li::before{content:"";flex-shrink:0;width:.45rem;height:.45rem;border-radius:999px;background:hsl(var(--signal));transform:translateY(-.1rem)}.callout-result li::before{background:hsl(var(--ok))}.article-foot{display:flex;flex-direction:column;gap:2.5rem;margin-top:3rem;padding-top:2.5rem;border-top:1px solid hsl(var(--border))}.article-foot .section+.section{margin-top:0}.author{display:flex;gap:1.1rem;align-items:flex-start;padding:1.25rem}.author-img{width:4rem;height:4rem;flex-shrink:0;object-fit:cover;border:1px solid hsl(var(--border));border-radius:calc(var(--radius) - 2px)}.author .eyebrow{margin-bottom:.25rem;font-size:.75rem}.author-name{margin:0;font-weight:600}.author-bio{margin:.35rem 0 0;font-size:.9375rem;color:hsl(var(--muted-foreground));line-height:1.55}.author-links{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin:.6rem 0 0;font-family:var(--font-mono);font-size:.8125rem}.author-links a{color:hsl(var(--signal))}.author-links a:hover{text-decoration:underline;text-underline-offset:4px}.pager{display:grid;gap:1rem}@media(min-width:640px){.pager{grid-template-columns:1fr 1fr}}.pager-link{display:flex;flex-direction:column;gap:.3rem;padding:1rem 1.2rem;font-weight:500;transition:border-color .15s}.pager-link:hover{border-color:hsl(var(--signal)/.4)}.pager-next{text-align:right}.pager-label{font-family:var(--font-mono);font-size:.75rem;text-transform:uppercase;letter-spacing:.12em;color:hsl(var(--muted-foreground));font-weight:400}.footer{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;padding-top:1.5rem;border-top:1px solid hsl(var(--border));font-size:.875rem;color:hsl(var(--muted-foreground))}.footer-links{display:flex;flex-wrap:wrap;gap:.25rem 1.25rem}.footer a{transition:color .15s}.footer a:hover{color:hsl(var(--signal))}.footer-legal{font-family:var(--font-mono);font-size:.8125rem}@media(prefers-reduced-motion:reduce){.terminal-cursor{animation:none}*,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}}@media print{body{background:#fff;color:#000}.topbar,.toc,.footer,.article-foot,.copy-btn{display:none}.prose{color:#000;max-width:none}}.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.chroma .err{color:#f85149}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}