.dir-page .b-tools{position:relative;border-top:1px solid var(--gray-5);background:var(--gray-1)}.dir-page .b-tools-in{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-4) var(--space-6);padding-block:var(--space-5)}.dir-page .b-filter{display:inline-flex;align-items:center;gap:var(--space-3);font-size:14px;color:var(--gray-10)}.dir-page .b-filter select{min-height:40px;max-width:100%;padding:0 var(--space-3);border:1px solid var(--gray-7);border-radius:var(--radius-2);background:var(--gray-2);color:var(--gray-12);font-size:14px}.dir-page .b-filter select:focus-visible,.dir-page .b-jump button:focus-visible,.dir-page .b-toc button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.dir-page .b-count{margin:0;font-family:var(--font-mono);font-size:12px;color:var(--gray-9)}.dir-page .b-jump{display:flex;flex-wrap:wrap;gap:2px 4px;margin:0 0 0 auto;padding:0;list-style:none}.dir-page .b-jump button{min-height:32px;padding:0 10px;border:1px solid transparent;border-radius:var(--radius-2);background:none;color:var(--gray-10);font-family:var(--font-mono);font-size:12px;cursor:pointer;transition:color var(--motion-fast) var(--ease-out)}.dir-page .b-jump button:hover{color:var(--gray-12);border-color:var(--gray-7)}.dir-page .b-years{background:var(--gray-1);padding-bottom:80px}.dir-page .b-year{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-4);padding-top:var(--space-6);border-top:1px solid var(--gray-5);scroll-margin-top:80px}.dir-page .b-year+.b-year{margin-top:var(--space-5)}.dir-page .b-year-head h2{margin:0;font-size:32px;font-weight:500;line-height:1.1;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--gray-12)}.dir-page .b-year-head p{margin:var(--space-1) 0 0;font-family:var(--font-mono);font-size:12px;color:var(--gray-9)}.dir-page .b-list{margin:0;padding:0;list-style:none;min-width:0}.dir-page .b-item{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-1);padding:20px 0;border-top:1px solid var(--gray-5)}.dir-page .b-item:first-child{padding-top:0;border-top:0}.dir-page .b-item time{font-family:var(--font-mono);font-size:12px;color:var(--gray-9)}.dir-page .b-item h3{margin:0;font-size:20px;font-weight:500;line-height:1.3;letter-spacing:-.01em;text-wrap:balance}.dir-page .b-item h3 a{color:var(--gray-12);text-decoration:none}.dir-page .b-item h3 a:hover{color:var(--blue-11);text-decoration:underline;text-underline-offset:3px}.dir-page .b-item h3 a:focus-visible{outline:2px solid var(--focus-ring);outline-offset:3px}.dir-page .b-item p{max-width:68ch;margin:var(--space-1) 0 0;font-size:15px;line-height:1.55;color:var(--gray-10);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.dir-page .b-item .b-meta{display:block;margin:var(--space-2) 0 0;font-size:13px;color:var(--gray-9);-webkit-line-clamp:unset}.dir-page .b-empty{padding:48px 0;font-size:16px;color:var(--gray-10)}@media(min-width:1024px){.dir-page .b-year{grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--space-5);padding-top:var(--space-7)}.dir-page .b-year-head{grid-column:1 / span 3;align-self:start;position:sticky;top:96px}.dir-page .b-list{grid-column:4 / span 9}.dir-page .b-item{grid-template-columns:112px minmax(0,1fr);column-gap:var(--space-5);padding:24px 0}.dir-page .b-item time{grid-row:1 / span 3;padding-top:6px}.dir-page .b-item>*{grid-column:2}.dir-page .b-item>time{grid-column:1}}.dir-page .b-note{max-width:68ch;margin:0 0 var(--space-6);padding:var(--space-4);border:1px solid var(--gray-6);border-radius:var(--radius-3);background:var(--gray-2);font-size:14px;line-height:1.55;color:var(--gray-10)}.dir-page .b-note strong{display:block;margin-bottom:var(--space-1);font-size:14px;font-weight:500;color:var(--gray-12)}.dir-page .b-note p{margin:0}.dir-page .b-note a{color:var(--blue-11)}.dir-page .b-note a:hover{text-decoration:underline}.dir-page .b-head{position:relative;padding:64px 0;background:var(--gray-1)}@media(min-width:1024px){.dir-page .b-head{padding:96px 0}}.dir-page .b-head h1{max-width:24ch;margin:0;font-size:clamp(32px,8vw,48px);font-weight:500;line-height:1.08;letter-spacing:-.035em;color:var(--gray-12);text-wrap:balance}.dir-page .b-dek{max-width:58ch;margin:var(--space-5) 0 0;font-size:19px;line-height:1.55;color:var(--gray-10)}.dir-page .b-byline{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-6);margin:var(--space-6) 0 0;padding:0;list-style:none;font-size:14px;color:var(--gray-10)}.dir-page .b-byline .b-tags{font-family:var(--font-mono);font-size:12px;color:var(--gray-9)}.dir-page .b-hero{max-width:880px;margin:var(--space-7) 0 0}.dir-page .b-hero img{display:block;width:100%;border:1px solid var(--gray-6);border-radius:var(--radius-3)}.dir-page .b-hero figcaption,.dir-page .m-prose figcaption{margin-top:var(--space-2);font-size:13px;line-height:1.5;color:var(--gray-9)}.dir-page .b-body{padding-block:var(--space-7) 96px;border-top:1px solid var(--gray-5);background:var(--gray-1)}.dir-page .b-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-7)}.dir-page .b-article{min-width:0}.dir-page .b-loading{min-height:240px;margin:0;font-size:16px;color:var(--gray-9)}.dir-page .b-loading a,.dir-page .b-loading button{color:var(--blue-11)}.dir-page .b-toc{display:none}@media(min-width:1100px){.dir-page .b-grid{grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--space-5);align-items:start}.dir-page .b-article{grid-column:1 / span 8}.dir-page .b-toc{display:block;grid-column:10 / span 3;position:sticky;top:96px;align-self:start;font-size:14px}.dir-page .b-toc h2{margin:0 0 var(--space-3);font-size:13px;font-weight:500;color:var(--gray-9)}.dir-page .b-toc ul{margin:0;padding:0;list-style:none;border-left:1px solid var(--gray-5)}.dir-page .b-toc button{display:block;width:100%;padding:6px 0 6px var(--space-3);border:0;background:none;color:var(--gray-10);font-size:14px;line-height:1.4;text-align:left;cursor:pointer}.dir-page .b-toc button:hover{color:var(--gray-12)}}.dir-page .b-related{padding-block:64px 96px;border-top:1px solid var(--gray-5);background:var(--gray-2)}.dir-page .b-related h2{margin:0 0 var(--space-5);font-size:24px;font-weight:500;letter-spacing:-.02em;color:var(--gray-12)}.dir-page .b-related ul{margin:0;padding:0;list-style:none;max-width:760px}.dir-page .b-related li{display:grid;gap:2px;padding:16px 0;border-top:1px solid var(--gray-5)}.dir-page .b-related time{font-family:var(--font-mono);font-size:12px;color:var(--gray-9)}.dir-page .b-related a{font-size:17px;font-weight:500;color:var(--gray-12);text-decoration:none}.dir-page .b-related a:hover{color:var(--blue-11);text-decoration:underline;text-underline-offset:3px}@font-face{font-family:Proteus Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-400-latin.woff2) format("woff2")}@font-face{font-family:Proteus Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500-latin.woff2) format("woff2")}@font-face{font-family:Proteus Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-600-latin.woff2) format("woff2")}@font-face{font-family:Proteus Plex Sans Condensed;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-sans-condensed-500-latin.woff2) format("woff2")}@font-face{font-family:Proteus Plex Sans Condensed;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-sans-condensed-600-latin.woff2) format("woff2")}@font-face{font-family:Proteus Plex Sans Condensed;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/ibm-plex-sans-condensed-700-latin.woff2) format("woff2")}.proteus-figure,.proteus-cost-tables{--bg: var(--proteus-bg);--surface: var(--proteus-surface);--ink: var(--proteus-ink);--muted: var(--proteus-muted);--rule: var(--proteus-rule);--rule-strong: var(--proteus-rule-strong);--copper: var(--proteus-copper);--copper-tint: var(--proteus-copper-tint);--vpc1: var(--proteus-vpc1);--vpc1-tint: var(--proteus-vpc1-tint);--vpc2: var(--proteus-vpc2);--vpc2-tint: var(--proteus-vpc2-tint);--h-oeth: var(--proteus-h-oeth);--h-ip6: var(--proteus-h-ip6);--h-udp: var(--proteus-h-udp);--h-gnv: var(--proteus-h-gnv);--h-ieth: var(--proteus-h-ieth);--h-ip4: var(--proteus-h-ip4);--h-tcp: var(--proteus-h-tcp);--f-display: "Proteus Plex Sans Condensed", "Arial Narrow", "Helvetica Neue", Arial, sans-serif;--f-mono: "Proteus Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;color:var(--ink);min-width:0;max-width:100%}.proteus-figure{margin:32px 0 36px}.proteus-figure *,.proteus-figure *:before,.proteus-figure *:after{box-sizing:border-box}.proteus-figure button{touch-action:manipulation}.proteus-figure button:focus-visible,.proteus-figure [tabindex]:focus-visible,.proteus-figure summary:focus-visible{outline:2px solid var(--copper);outline-offset:2px}.proteus-figure code{font-family:var(--f-mono)}.proteus-figure .hex-column,.proteus-figure .fields{min-width:0}.proteus-figure .hex .b{border:0;padding:0;background:transparent;font:inherit;line-height:inherit}.proteus-figure .field-button{border:0;padding:0;background:transparent;color:inherit;font:inherit;cursor:pointer;text-align:left}.proteus-figure .fields .tbl-wrap{margin:0}.proteus-figure .all-fields,.proteus-figure .os-fallback{margin-top:16px}.proteus-figure summary{font-family:var(--f-display);cursor:pointer;color:var(--ink)}.proteus-figure .all-fields .fields{margin-top:20px}.proteus-figure .segs rect{cursor:pointer}.proteus-figure .segs rect:focus-visible{outline:2px solid var(--ink);outline-offset:3px}.proteus-figure .fig-scroll{overflow-x:auto;background:var(--surface);border:1px solid var(--rule);border-radius:6px;padding:16px}.proteus-figure .fig-scroll svg{display:block;width:100%;min-width:760px;height:auto}.proteus-figure figcaption{font-family:var(--f-display);font-size:.95rem;color:var(--muted);margin-top:10px;max-width:48rem}.proteus-figure figcaption b{color:var(--ink);font-weight:600}.proteus-figure svg text{font-family:var(--f-display)}.proteus-figure .d-box{fill:var(--surface);stroke:var(--rule-strong);stroke-width:1.2}.proteus-figure .d-plain{fill:var(--bg);stroke:var(--rule-strong);stroke-width:1.2}.proteus-figure .d-t{fill:var(--ink);font-size:14px;font-weight:600}.proteus-figure .d-t2{fill:var(--ink);font-size:13px;font-weight:500}.proteus-figure .d-s{fill:var(--muted);font-size:12px;font-family:var(--f-mono)!important}.proteus-figure .d-lbl{fill:var(--muted);font-size:12px;letter-spacing:.08em;font-family:var(--f-mono)!important}.proteus-figure .d-line{stroke:var(--rule-strong);stroke-width:1.4;fill:none}.proteus-figure .d-arrow{stroke:var(--ink);stroke-width:1.4;fill:none}.proteus-figure .d-dash{stroke-dasharray:5 4}.proteus-figure .d-ink{fill:var(--ink)}.proteus-figure .d-cu-box{fill:var(--copper-tint);stroke:var(--copper);stroke-width:1.6}.proteus-figure .d-cu-t{fill:var(--copper);font-weight:600;font-size:14px}.proteus-figure .d-cu-s{fill:var(--copper);font-size:12px;font-family:var(--f-mono)!important}.proteus-figure .d-cu-line{stroke:var(--copper);stroke-width:3;fill:none}.proteus-figure .d-cu-arrow{stroke:var(--copper);stroke-width:2;fill:none}.proteus-figure .d-cu-fill{fill:var(--copper)}.proteus-figure .d-v1-box{fill:var(--vpc1-tint);stroke:var(--vpc1);stroke-width:1.4}.proteus-figure .d-v1-t{fill:var(--vpc1);font-weight:600;font-size:14px}.proteus-figure .d-v1-line{stroke:var(--vpc1);stroke-width:1.3;fill:none}.proteus-figure .d-v2-box{fill:var(--vpc2-tint);stroke:var(--vpc2);stroke-width:1.4}.proteus-figure .d-v2-t{fill:var(--vpc2);font-weight:600;font-size:14px}.proteus-figure .d-v2-line{stroke:var(--vpc2);stroke-width:1.3;fill:none}.proteus-figure .d-ghost{fill:none;stroke:var(--rule-strong);stroke-width:1.2;stroke-dasharray:6 5}.proteus-figure .stack{display:grid;gap:6px}.proteus-figure .stack .row{display:grid;grid-template-columns:13rem minmax(0,1fr);gap:16px;align-items:start;padding:14px 18px;border:1px solid var(--rule);border-radius:6px;background:var(--surface)}.proteus-figure .stack .row.ours{background:var(--copper-tint);border-color:var(--copper)}.proteus-figure .stack .nm{font-family:var(--f-display);font-weight:700;font-size:1.1rem;line-height:1.25;min-width:0}.proteus-figure .stack .nm code{font-size:.95em;background:transparent;border:0;padding:0}.proteus-figure .stack .src{display:block;font-family:var(--f-mono);font-weight:400;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-top:3px}.proteus-figure .stack .row.ours .src{color:var(--copper)}.proteus-figure .stack .does{font-size:.95rem;line-height:1.45;min-width:0}.proteus-figure .stack .flow{font-family:var(--f-mono);font-size:12px;color:var(--muted);padding-left:18px}.proteus-figure .stack .oses{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.proteus-figure .stack .os{font-family:var(--f-display);font-size:.88rem;font-weight:600;border:1px solid var(--copper);border-radius:4px;padding:2px 8px;background:var(--surface)}@media(max-width:620px){.proteus-figure .stack .row{grid-template-columns:1fr;gap:6px}}.proteus-figure .seg{display:inline-flex;flex-wrap:wrap;gap:4px;background:var(--surface);border:1px solid var(--rule);border-radius:6px;padding:4px;margin-bottom:10px}.proteus-figure .seg button{font-family:var(--f-display);font-size:.95rem;font-weight:600;border:0;background:transparent;color:var(--muted);padding:6px 12px;border-radius:4px;cursor:pointer}.proteus-figure .seg button[aria-pressed=true]{background:var(--ink);color:var(--bg)}.proteus-figure .tbl-wrap{overflow-x:auto;margin:20px 0 28px}.proteus-figure table{display:table;margin:0;border-collapse:collapse;width:100%;font-size:.92rem;line-height:1.4}.proteus-figure th,.proteus-figure td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--rule);vertical-align:top}.proteus-figure th{font-family:var(--f-display);font-weight:600;color:var(--muted);font-size:.85rem;letter-spacing:.03em}.proteus-figure td.num,.proteus-figure th.num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--f-mono)}.proteus-figure td code{white-space:nowrap}.proteus-figure tr.shared td{background:var(--copper-tint)}.proteus-figure .tnote{font-family:var(--f-display);font-size:.95rem;color:var(--muted);margin-top:-16px}.proteus-figure .dissect{background:var(--surface);border:1px solid var(--rule);border-radius:6px;padding:16px}.proteus-figure .hdr-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}.proteus-figure .hdr-tabs button{font-family:var(--f-display);font-size:.9rem;font-weight:600;background:var(--bg);color:var(--ink);border:1px solid var(--rule);border-radius:4px;padding:5px 10px 5px 8px;cursor:pointer;display:inline-flex;align-items:center;gap:7px}.proteus-figure .hdr-tabs button .sw{width:10px;height:10px;border-radius:2px;display:inline-block}.proteus-figure .hdr-tabs button[aria-pressed=true]{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}.proteus-figure .hdr-tabs button .ln{font-family:var(--f-mono);font-weight:400;font-size:.75rem;color:var(--muted)}.proteus-figure .dis-grid{display:grid;grid-template-columns:minmax(0,22rem) minmax(0,1fr);gap:20px;align-items:start}@media(max-width:900px){.proteus-figure .dis-grid{grid-template-columns:minmax(0,1fr)}}.proteus-figure .hex{font-family:var(--f-mono);font-size:13.5px;line-height:1.75;overflow-x:auto}.proteus-figure .hex .row{white-space:nowrap}.proteus-figure .hex .off{color:var(--muted);margin-right:12px;-webkit-user-select:none;user-select:none}.proteus-figure .hex .b{display:inline-block;width:2.35ch;text-align:center;border-radius:2px;cursor:pointer;transition:opacity var(--motion-fast)}.proteus-figure .hex .b.gap{margin-right:.9ch}.proteus-figure .hex.has-sel .b:not(.sel){opacity:.32}.proteus-figure .hex .b.hl{outline:1.5px solid var(--ink);background:var(--bg)}.proteus-figure .readout{font-family:var(--f-mono);font-size:12.5px;color:var(--muted);min-height:1.6em;margin-top:8px}.proteus-figure .readout b{color:var(--ink);font-weight:600}.proteus-figure .fields h3{margin:0 0 4px;font-size:1.1rem}.proteus-figure .fields .sub{font-family:var(--f-display);color:var(--muted);font-size:.92rem;margin:0 0 10px}.proteus-figure .fields table{display:table;margin:0;font-size:.86rem}.proteus-figure .fields th,.proteus-figure .fields td{border:0;border-bottom:1px solid var(--rule);padding:8px 10px}.proteus-figure .fields td:first-child{font-family:var(--f-display);font-weight:600;white-space:nowrap}.proteus-figure .fields td.v{font-family:var(--f-mono);white-space:nowrap}.proteus-figure .fields td.o{font-family:var(--f-mono);color:var(--muted);white-space:nowrap}.proteus-figure .fields tr:hover td{background:var(--bg)}.proteus-figure .fields td.note{color:var(--muted);min-width:14rem}.proteus-figure .bits{overflow-x:auto;margin-top:8px}.proteus-figure .bitgrid{display:grid;grid-template-columns:repeat(32,minmax(18px,1fr));min-width:640px;font-family:var(--f-mono);font-size:11px}.proteus-figure .bitgrid .ru{text-align:center;color:var(--muted);padding-bottom:3px}.proteus-figure .bitgrid .fd{border:1px solid var(--h-gnv);margin:-1px 0 0 -1px;padding:6px 4px;text-align:center;background:var(--copper-tint);color:var(--ink);line-height:1.3;min-width:0;overflow:hidden}.proteus-figure .bitgrid .fd b{display:block;font-family:var(--f-display);font-size:12px;font-weight:600}.proteus-figure .bitgrid .fd span{color:var(--copper)}.proteus-figure .bitgrid .fd.key{background:var(--copper);color:var(--bg)}.proteus-figure .bitgrid .fd.key span{color:var(--bg)}.blog-prose:has(.proteus-figure){max-width:1080px}.blog-prose:has(.proteus-figure)>:not(.proteus-figure,.proteus-cost-tables){max-width:42rem;margin-left:auto;margin-right:auto}@media(prefers-reduced-motion:reduce){.proteus-figure .hex .b{transition:none}}.proteus-figure .k-opte{fill:var(--copper);stroke:var(--copper)}.proteus-figure .k-glue{fill:var(--surface);stroke:var(--copper);stroke-width:1.2}.proteus-figure .k-fix{fill:var(--copper-tint);stroke:var(--copper);stroke-width:1.2;stroke-dasharray:4 3}.proteus-figure .k-mac{fill:var(--rule);stroke:var(--rule-strong)}.proteus-figure .k-nic{fill:var(--rule-strong);stroke:var(--rule-strong)}.proteus-figure .k-guest{fill:var(--vpc1-tint);stroke:var(--vpc1)}.proteus-figure .c-val{font-family:var(--f-mono)!important;font-size:11.5px;font-weight:600}.proteus-figure .c-nm{font-family:var(--f-mono)!important;font-size:10.5px}.proteus-figure .on-dark{fill:var(--bg)}.proteus-figure .on-light{fill:var(--ink)}.proteus-figure .legend{display:flex;flex-wrap:wrap;gap:6px 18px;font-family:var(--f-display);font-size:.9rem;color:var(--muted);margin-top:12px}.proteus-figure .legend i,.proteus-cost-tables .ctbl .sw{display:inline-block;width:12px;height:12px;border-radius:2px;vertical-align:-1px;margin-right:6px;border:1px solid var(--rule-strong)}.proteus-figure .sw-opte,.proteus-cost-tables .sw-opte{background:var(--copper);border-color:var(--ink)!important}.proteus-figure .sw-glue,.proteus-cost-tables .sw-glue{background:var(--surface);border-color:var(--copper)!important}.proteus-figure .sw-fix,.proteus-cost-tables .sw-fix{background:repeating-linear-gradient(45deg,var(--copper-tint) 0 3px,var(--copper) 3px 4px);border-color:var(--copper)!important}.proteus-figure .sw-mac,.proteus-cost-tables .sw-mac{background:var(--rule)}.proteus-figure .sw-nic,.proteus-cost-tables .sw-nic{background:var(--rule-strong)}.proteus-figure .sw-guest,.proteus-cost-tables .sw-guest{background:var(--vpc1-tint);border-color:var(--vpc1)!important}.proteus-figure .sw-proj{background:transparent;border:1.5px dashed var(--copper)!important}.proteus-figure .sw-meas{background:var(--vpc1);border-color:var(--vpc1)!important}.proteus-figure .sw-full{background:var(--muted);border-color:var(--muted)!important}.proteus-cost-tables{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin:8px 0 28px;color:var(--ink)}.proteus-cost-tables>div{min-width:0;overflow-x:auto}.proteus-cost-tables h3{margin:0 0 4px;font-size:1rem}.proteus-cost-tables table{display:table;margin:0;border-collapse:collapse;width:100%;font-size:.92rem;line-height:1.4}.proteus-cost-tables th,.proteus-cost-tables td{text-align:left;padding:8px 10px;border:0;border-bottom:1px solid var(--rule);vertical-align:top}.proteus-cost-tables th{font-family:var(--f-display);font-weight:600;color:var(--muted);font-size:.85rem;letter-spacing:.03em}.proteus-cost-tables td.num,.proteus-cost-tables th.num{text-align:right;font-variant-numeric:tabular-nums;font-family:var(--f-mono);white-space:nowrap}.proteus-cost-tables .cnote{display:block;color:var(--muted);font-size:.82rem}.proteus-cost-tables tr.total td{font-weight:600;border-bottom:2px solid var(--ink)}@media(max-width:760px){.proteus-cost-tables{grid-template-columns:minmax(0,1fr)}}
