.toc[data-astro-cid-lkw5wmmf]{font-size:13.5px}.toc-title[data-astro-cid-lkw5wmmf]{color:var(--green);margin:0 0 10px;font-size:12px}ol[data-astro-cid-lkw5wmmf]{border-left:1px solid var(--border);margin:0;padding:0 0 0 2px;list-style:none}li[data-astro-cid-lkw5wmmf] a[data-astro-cid-lkw5wmmf]{color:var(--text-dim);padding:4px 0 4px 14px;line-height:1.5;transition:color .2s;display:block;position:relative}li[data-astro-cid-lkw5wmmf].d3 a[data-astro-cid-lkw5wmmf]{padding-left:28px;font-size:12.5px}li[data-astro-cid-lkw5wmmf] a[data-astro-cid-lkw5wmmf]:hover{color:#fff;text-shadow:none}li[data-astro-cid-lkw5wmmf] a[data-astro-cid-lkw5wmmf].active{color:var(--cyan)}li[data-astro-cid-lkw5wmmf] a[data-astro-cid-lkw5wmmf].active:before{content:"";background:var(--cyan);width:3px;box-shadow:0 0 10px var(--cyan);border-radius:2px;position:absolute;top:6px;bottom:6px;left:-2px}.comments[data-astro-cid-nuen6n26]{margin-top:56px}.prose{color:var(--text);word-wrap:break-word;font-size:16.5px;line-height:1.85}.prose>:first-child{margin-top:0}.prose h2,.prose h3,.prose h4{color:#fff;scroll-margin-top:calc(var(--header-h) + 20px);line-height:1.35;position:relative}.prose h2{border-bottom:1px solid var(--border);margin:2.4em 0 .9em;padding-bottom:.4em;font-size:1.55em}.prose h2:before{content:"##";font-family:var(--font-mono);color:var(--cyan);text-shadow:0 0 10px #00e5ff99;margin-right:.5em;font-size:.75em}.prose h3{margin:1.9em 0 .7em;font-size:1.25em}.prose h3:before{content:">";font-family:var(--font-mono);color:var(--green);margin-right:.5em}.prose h4{color:var(--text);margin:1.6em 0 .6em;font-size:1.05em}.prose .heading-anchor{font-family:var(--font-mono);color:var(--text-faint);opacity:0;margin-left:.4em;font-size:.8em;transition:opacity .2s}.prose h2:hover .heading-anchor,.prose h3:hover .heading-anchor,.prose h4:hover .heading-anchor{opacity:1}.prose p,.prose ul,.prose ol,.prose blockquote,.prose table,.prose figure,.prose pre{margin:0 0 1.25em}.prose strong{color:#fff}.prose em{color:#e6d9ff}.prose a{color:var(--cyan);border-bottom:1px dashed #00e5ff73}.prose a:hover{border-bottom-style:solid}.prose ul,.prose ol{padding-left:1.5em}.prose li{margin:.3em 0}.prose li::marker{color:var(--cyan);font-family:var(--font-mono)}.prose ul ul,.prose ol ol,.prose ul ol,.prose ol ul{margin:.3em 0}.prose input[type=checkbox]{accent-color:var(--green);margin-right:.4em}.prose hr{background:linear-gradient(90deg, transparent, var(--border-strong), transparent);border:0;height:1px;margin:2.5em 0}.prose blockquote{border-left:3px solid var(--violet);color:var(--text-dim);background:#a78bfa0f;border-radius:0 8px 8px 0;padding:.8em 1.1em}.prose blockquote>:last-child{margin-bottom:0}.prose :not(pre)>code{color:#8ff5ff;font-family:var(--font-mono);background:#00e5ff14;border:1px solid #00e5ff29;border-radius:5px;padding:.15em .45em;font-size:.86em}.prose pre{border:1px solid var(--border);border-radius:10px;padding:2.6em 0 1.1em;font-size:13.5px;line-height:1.7;position:relative;overflow:auto;box-shadow:inset 0 1px #ffffff08;background-color:var(--code-bg)!important}.prose pre>code{width:max-content;min-width:100%;font-family:var(--font-mono);padding:0 1.2em;display:block}.prose pre:before{content:"";opacity:.85;background:#ff5f56;border-radius:50%;width:10px;height:10px;position:absolute;top:13px;left:14px;box-shadow:16px 0 #ffbd2e,32px 0 #27c93f}.code-wrap{position:relative}.code-wrap .code-lang{font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);pointer-events:none;z-index:1;font-size:11px;position:absolute;top:7px;left:64px}.code-wrap .code-copy{z-index:1;border:1px solid var(--border);color:var(--text-dim);font-family:var(--font-mono);cursor:pointer;background:#ffffff08;border-radius:6px;padding:2px 10px;font-size:11px;transition:all .2s;position:absolute;top:6px;right:8px}.code-wrap .code-copy:hover{color:var(--cyan);border-color:var(--border-strong)}.code-wrap .code-copy.ok{color:var(--green);border-color:#3dff9e80}.prose table{border-collapse:collapse;width:100%;font-size:14.5px;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--border);text-align:left;padding:.6em .9em}.prose thead th{color:#fff;font-family:var(--font-mono);white-space:nowrap;background:#00e5ff12;font-size:13px}.prose tbody tr:nth-child(2n){background:#ffffff04}.prose tbody tr:hover{background:#00e5ff0a}.prose img{border:1px solid var(--border);border-radius:10px;margin:1.5em auto;display:block}.prose .callout{--c:var(--cyan);border:1px solid color-mix(in srgb, var(--c) 30%, transparent);border-left:3px solid var(--c);background:color-mix(in srgb, var(--c) 6%, transparent);color:var(--text);border-radius:0 10px 10px 0;margin:0 0 1.4em;padding:.9em 1.15em}.prose .callout>:last-child{margin-bottom:0}.prose .callout .callout-title{font-family:var(--font-mono);color:var(--c);margin:0 0 .35em;font-size:14px;font-weight:700}.prose .callout .callout-title:before{margin-right:.5em}.prose .callout-note{--c:var(--cyan)}.prose .callout-note .callout-title:before{content:"[i]"}.prose .callout-tip{--c:var(--green)}.prose .callout-tip .callout-title:before{content:"[+]"}.prose .callout-important{--c:var(--violet)}.prose .callout-important .callout-title:before{content:"[*]"}.prose .callout-warning{--c:var(--amber)}.prose .callout-warning .callout-title:before{content:"[!]"}.prose .callout-caution{--c:var(--red)}.prose .callout-caution .callout-title:before{content:"[x]"}.diagram{border:1px solid var(--border);background:linear-gradient(#00e5ff06 1px,#0000 1px) 0 0/100% 22px,#080c18bf;border-radius:12px;margin:1.6em 0;padding:0;overflow:hidden}.diagram figcaption{border-bottom:1px solid var(--border);font-family:var(--font-mono);color:#fff;background:#ffffff05;align-items:center;gap:10px;padding:10px 16px;font-size:13px;display:flex}.diagram .diagram-kind{color:#04060c;background:var(--cyan);border-radius:4px;padding:0 7px;font-size:11px;font-weight:700}.packet-diagram .diagram-kind{background:var(--green)}.diagram-scroll{padding:18px 16px;overflow-x:auto}.seq-diagram svg{max-width:100%;height:auto;font-family:var(--font-mono);margin:0 auto;display:block;overflow:visible}.seq-diagram .seq-c0{--sc:#00e5ff}.seq-diagram .seq-c1{--sc:#3dff9e}.seq-diagram .seq-c2{--sc:#ff6bcb}.seq-diagram .seq-c3{--sc:#ffb020}.seq-diagram marker path{fill:var(--sc)}.seq-head rect{fill:color-mix(in srgb, var(--sc) 12%, #0b1121);stroke:var(--sc);stroke-width:1.2px}.seq-head text{fill:#fff;font-size:14px;font-weight:700}.seq-foot{fill:var(--sc)}.seq-life{stroke:#8d9ab659;stroke-dasharray:3 5}.seq-line{stroke:var(--sc);stroke-width:1.8px;fill:none;filter:drop-shadow(0 0 4px color-mix(in srgb, var(--sc) 70%, transparent))}.seq-line.dashed{stroke-dasharray:6 5}.seq-label{fill:var(--text);font-size:13px}.seq-msg.lost .seq-line{stroke:var(--red);filter:drop-shadow(0 0 4px #ff5f56b3)}.seq-msg.lost .seq-label{fill:#ffb3ae}.seq-cross{stroke:var(--red);stroke-width:2.4px}.seq-divider line{stroke:#a78bfa66;stroke-dasharray:2 4}.seq-divider rect{fill:#120f24;stroke:#a78bfa99}.seq-divider text{fill:#d8ccff;font-size:12px}.seq-note rect{fill:#ffb0201a;stroke:#ffb0208c}.seq-note text{fill:#ffd690;font-size:12px}.seq-animate .seq-msg{opacity:0}.seq-animate .seq-msg .seq-line:not(.dashed){stroke-dashoffset:1px;stroke-dasharray:1 1}.seq-animate.in .seq-msg{animation:.4s forwards seqFade;animation-delay:calc(var(--i) * .42s)}.seq-animate.in .seq-msg .seq-line:not(.dashed){animation:.5s forwards seqDraw;animation-delay:calc(var(--i) * .42s)}@keyframes seqFade{to{opacity:1}}@keyframes seqDraw{to{stroke-dashoffset:0}}.pkt-grid{--bits:32;grid-template-columns:repeat(var(--bits), minmax(20px, 1fr));min-width:640px;font-family:var(--font-mono);border-top:1px solid #3dff9e59;border-left:1px solid #3dff9e59;grid-template-rows:24px;grid-auto-rows:minmax(46px,auto);display:grid}.pkt-ruler{grid-row:1;grid-template-columns:repeat(var(--bits), minmax(20px, 1fr));background:#3dff9e0d;border-bottom:1px solid #3dff9e59;border-right:1px solid #3dff9e59;align-items:end;min-height:22px;display:grid}.pkt-ruler span{text-align:center;color:var(--text-faint);grid-row:1;font-size:10px;line-height:22px}.pkt-ruler span.major{color:var(--green)}.pkt-field{text-align:center;color:var(--text);cursor:default;background:#3dff9e06;border-bottom:1px solid #3dff9e59;border-right:1px solid #3dff9e59;justify-content:center;align-items:center;padding:6px 4px;font-size:12.5px;line-height:1.35;transition:background .2s,box-shadow .2s;display:flex;position:relative}.pkt-field:hover{z-index:1;box-shadow:inset 0 0 0 1px var(--green), 0 0 18px #3dff9e4d;background:#3dff9e1f}.pkt-field .pkt-size{color:var(--text-faint);font-size:9.5px;position:absolute;bottom:1px;right:5px}.pkt-field.narrow .pkt-label{writing-mode:vertical-rl;letter-spacing:.04em;font-size:10.5px}.pkt-field.cont{color:var(--text-dim);background:repeating-linear-gradient(-45deg,#0000 0 6px,#3dff9e0a 6px 12px)}.pkt-field.var{color:var(--text-dim);background:repeating-linear-gradient(90deg,#3dff9e08 0 10px,#0000 10px 20px);border-bottom-style:dashed;font-style:italic}.progress[data-astro-cid-vt34qafq]{z-index:60;pointer-events:none;height:2px;position:fixed;top:0;left:0;right:0}.progress[data-astro-cid-vt34qafq] span[data-astro-cid-vt34qafq]{transform-origin:0;background:linear-gradient(90deg, var(--cyan), var(--green), var(--pink));height:100%;box-shadow:0 0 10px var(--cyan);display:block;transform:scaleX(0)}.post-wrap[data-astro-cid-vt34qafq]{grid-template-columns:minmax(0,1fr) 240px;gap:56px;padding-top:48px;display:grid}.post[data-astro-cid-vt34qafq]{width:100%;min-width:0;max-width:800px}.crumb[data-astro-cid-vt34qafq]{color:var(--text-dim);gap:8px;font-size:13px;display:flex}.crumb[data-astro-cid-vt34qafq] a[data-astro-cid-vt34qafq]{color:var(--c)}.post-head[data-astro-cid-vt34qafq] h1[data-astro-cid-vt34qafq]{color:#fff;letter-spacing:-.01em;text-shadow:0 0 30px color-mix(in srgb, var(--c) 30%, transparent);margin:12px 0;font-size:clamp(28px,4.4vw,40px);line-height:1.3}.desc[data-astro-cid-vt34qafq]{color:var(--text-dim);margin:0 0 22px;font-size:17px}.fields[data-astro-cid-vt34qafq]{border:1px solid var(--border);background:#080c1899;border-radius:10px;flex-wrap:wrap;margin:0 0 16px;display:flex;overflow:hidden}.fields[data-astro-cid-vt34qafq] div[data-astro-cid-vt34qafq]{border-right:1px solid var(--border);flex:auto;padding:8px 14px}.fields[data-astro-cid-vt34qafq] div[data-astro-cid-vt34qafq]:last-child{border-right:0}.fields[data-astro-cid-vt34qafq] dt[data-astro-cid-vt34qafq]{letter-spacing:.14em;color:var(--text-faint);font-size:10px}.fields[data-astro-cid-vt34qafq] dd[data-astro-cid-vt34qafq]{color:#fff;white-space:nowrap;margin:0;font-size:13.5px}.tags[data-astro-cid-vt34qafq]{flex-wrap:wrap;gap:8px;margin-bottom:36px;display:flex}.post-head[data-astro-cid-vt34qafq]{border-bottom:1px dashed var(--border);margin-bottom:36px;padding-bottom:8px}.post-foot[data-astro-cid-vt34qafq]{margin-top:56px}.eof[data-astro-cid-vt34qafq]{border-top:1px dashed var(--border);border-bottom:1px dashed var(--border);color:var(--green);justify-content:space-between;padding:14px 0;font-size:13px;display:flex}.pager[data-astro-cid-vt34qafq]{grid-template-columns:1fr 1fr;gap:16px;margin-top:28px;display:grid}.pager[data-astro-cid-vt34qafq] a[data-astro-cid-vt34qafq]{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:10px;flex-direction:column;gap:4px;padding:16px 18px;transition:border-color .2s,box-shadow .2s;display:flex}.pager[data-astro-cid-vt34qafq] a[data-astro-cid-vt34qafq]:hover{border-color:var(--border-strong);text-shadow:none;box-shadow:0 0 24px #00e5ff1f}.pager[data-astro-cid-vt34qafq] a[data-astro-cid-vt34qafq] span[data-astro-cid-vt34qafq]{color:var(--cyan);font-size:12px}.pager[data-astro-cid-vt34qafq] a[data-astro-cid-vt34qafq] b[data-astro-cid-vt34qafq]{font-weight:600;line-height:1.5}.pager[data-astro-cid-vt34qafq] .next[data-astro-cid-vt34qafq]{text-align:right;grid-column:2}.side-inner[data-astro-cid-vt34qafq]{top:calc(var(--header-h) + 28px);max-height:calc(100vh - var(--header-h) - 56px);border:1px solid var(--border);background:var(--surface);-webkit-backdrop-filter:blur(8px);border-radius:12px;padding:18px;position:sticky;overflow:auto}.to-top[data-astro-cid-vt34qafq]{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:6px;margin-top:16px;padding:4px 10px;font-size:12px}.to-top[data-astro-cid-vt34qafq]:hover{color:var(--cyan);border-color:var(--border-strong)}@media (width<=1080px){.post-wrap[data-astro-cid-vt34qafq]{grid-template-columns:minmax(0,1fr)}.side[data-astro-cid-vt34qafq]{display:none}.post[data-astro-cid-vt34qafq]{margin:0 auto}}@media (width<=640px){.pager[data-astro-cid-vt34qafq]{grid-template-columns:minmax(0,1fr)}.pager[data-astro-cid-vt34qafq] .next[data-astro-cid-vt34qafq]{grid-column:1}.fields[data-astro-cid-vt34qafq] div[data-astro-cid-vt34qafq]{border-bottom:1px solid var(--border);flex-basis:33%}}
