@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/IBMPlexSans-Regular-Latin1.woff2)format("woff2");unicode-range:U+0,U+D,U+20-7E,U+A0-A3,U+A4-FF,U+131,U+152-153,U+2C6,U+2DA,U+2DC,U+2013-2014,U+2018-201A,U+201C-201E,U+2020-2022,U+2026,U+2030,U+2039-203A,U+2044,U+2074,U+20AC,U+2122,U+2212,U+FB01-FB02}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/IBMPlexSans-SemiBold-Latin1.woff2)format("woff2");unicode-range:U+0,U+D,U+20-7E,U+A0-A3,U+A4-FF,U+131,U+152-153,U+2C6,U+2DA,U+2DC,U+2013-2014,U+2018-201A,U+201C-201E,U+2020-2022,U+2026,U+2030,U+2039-203A,U+2044,U+2074,U+20AC,U+2122,U+2212,U+FB01-FB02}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/IBMPlexMono-Regular-Latin1.woff2)format("woff2");unicode-range:U+20-7E,U+A0-FF,U+131,U+152-153,U+2C6,U+2DA,U+2DC,U+2013-2014,U+2018-201A,U+201C-201E,U+2020-2022,U+2026,U+2030,U+2039-203A,U+2044,U+20AC,U+2122,U+2212,U+FB01-FB02}:root{color-scheme:light dark;--paper:#f5f3ed;--surface:#fbfaf6;--ink:#242724;--ink-2:#555d55;--rule:#c9cec4;--accent:#2b52a0;--amber-ink:#755014;--amber-surface:#f9e7b5;--green-ink:#2b6638;--red-ink:#9a2a23;--sans:"IBM Plex Sans", "Helvetica Neue", Arial, sans-serif;--mono:"IBM Plex Mono", Consolas, "Liberation Mono", Menlo, monospace;--step-meta:.8125rem;--step-code:.875rem;--step-body:1.125rem;--step-h3:1.5rem;--step-h2:2rem;--step-h1:clamp(2.125rem, 1.35rem + 2.6vw, 3.25rem);--step-h1-inner:clamp(2rem, 1.6rem + 1.4vw, 2.5rem);--u:8px;--measure:66ch;--content:1184px;--gutter:24px;--label-col:13rem}@media (prefers-color-scheme:dark){:root{--paper:#181c1b;--surface:#202624;--ink:#e9ede6;--ink-2:#b3bbb3;--rule:#4a554e;--accent:#9eb4ee;--amber-ink:#f7d091;--amber-surface:#312a1c;--green-ink:#a3d9ab;--red-ink:#f4a9a1}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:var(--step-body);font-kerning:normal;overflow-wrap:break-word;margin:0;font-weight:400;line-height:1.55}h1,h2,h3{letter-spacing:-.01em;margin:0;font-weight:600;line-height:1.1}h1{font-size:var(--step-h1-inner);max-width:22ch}h2{font-size:var(--step-h2)}h3{font-size:var(--step-h3);line-height:1.2}p,ul,ol,dl,figure{margin:0}p+p,p+ul,ul+p,p+ol,ol+p{margin-top:calc(var(--u) * 2)}a{color:var(--accent);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}code,kbd,samp,pre{font-family:var(--mono)}.wrap{max-width:var(--content);padding-inline:var(--gutter);margin-inline:auto}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{left:var(--gutter);z-index:10;padding:var(--u) calc(var(--u) * 2);background:var(--surface);color:var(--accent);border:1px solid var(--rule);position:absolute;top:-100px}.skip-link:focus{top:var(--u)}.label{font-family:var(--mono);font-size:var(--step-meta);letter-spacing:.04em;color:var(--ink-2);line-height:1.5}.label .num{color:var(--ink)}.site-header{border-bottom:1px solid var(--ink)}.header-inner{justify-content:space-between;align-items:baseline;gap:var(--u) calc(var(--u) * 4);padding-block:calc(var(--u) * 2.5);flex-wrap:wrap;display:flex}.wordmark{font-family:var(--sans);letter-spacing:-.015em;color:var(--ink);font-size:1.375rem;font-weight:600;line-height:1;text-decoration:none}a.wordmark:hover{text-decoration:underline 2px}.site-nav ul{gap:var(--u) calc(var(--u) * 3);flex-wrap:wrap;padding:0;list-style:none;display:flex}.site-nav a{color:var(--ink);font-size:1rem;text-decoration:none}.site-nav a:hover,.site-nav a[aria-current=page]{text-underline-offset:.3em;text-decoration:underline 2px}.page-head{grid-template-columns:var(--label-col) minmax(0, 1fr);gap:calc(var(--u) * 2) calc(var(--u) * 4);padding-block:calc(var(--u) * 8) calc(var(--u) * 6);display:grid}.page-head.home h1{font-size:var(--step-h1);max-width:20ch}.lede{margin-top:calc(var(--u) * 3);max-width:var(--measure);color:var(--ink);font-size:1.1875rem}.section{grid-template-columns:var(--label-col) minmax(0, 1fr);gap:calc(var(--u) * 2) calc(var(--u) * 4);border-top:1px solid var(--rule);padding-block:calc(var(--u) * 6);display:grid}.section>.label{padding-top:.35rem}.section-body>*+*,.section-body h2+*{margin-top:calc(var(--u) * 3)}.prose{max-width:var(--measure)}.prose>*+h3{margin-top:calc(var(--u) * 4)}.prose>h3+*{margin-top:var(--u)}.prose ul,.prose ol{padding-left:1.25em}.prose li+li{margin-top:var(--u)}.ruled-list{counter-reset:item;border-top:1px solid var(--rule);max-width:52rem;padding:0;list-style:none}.ruled-list>li{counter-increment:item;gap:0 calc(var(--u) * 2);padding-block:calc(var(--u) * 2);border-bottom:1px solid var(--rule);grid-template-columns:3rem minmax(0,1fr);display:grid}.ruled-list>li:before{content:counter(item, decimal-leading-zero);font-family:var(--mono);font-size:var(--step-meta);color:var(--ink-2);padding-top:.3rem}.ruled-list h3{font-size:1.125rem;line-height:1.4}.ruled-list p{margin-top:calc(var(--u) * .5);max-width:var(--measure);color:var(--ink-2)}.ruled-list .tag{margin-left:var(--u)}.def-rows{border-top:1px solid var(--rule);max-width:52rem}.def-rows>div{gap:var(--u) calc(var(--u) * 3);padding-block:calc(var(--u) * 2);border-bottom:1px solid var(--rule);grid-template-columns:11rem minmax(0,1fr);display:grid}.def-rows dt{font-weight:600}.def-rows dd{max-width:var(--measure);margin:0}.tag{font-family:var(--mono);font-size:var(--step-meta);color:var(--ink-2);border:1px solid var(--rule);white-space:nowrap;padding:0 .4em}.figure-frame{border:1px solid var(--ink);background:var(--surface)}.figure-head{justify-content:space-between;gap:var(--u) calc(var(--u) * 2);padding:var(--u) calc(var(--u) * 2);border-bottom:1px solid var(--ink);flex-wrap:wrap;display:flex}.figure-head .file{font-family:var(--mono);font-size:var(--step-meta)}.illustration-flag{font-family:var(--mono);font-size:var(--step-meta);font-weight:400}.code-and-finding{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);display:grid}.code{padding:calc(var(--u) * 2) 0;counter-reset:line;font-family:var(--mono);font-size:var(--step-code);border-right:1px solid var(--rule);margin:0;line-height:1.65;list-style:none}.code li{counter-increment:line;min-height:1.65em;padding-right:calc(var(--u) * 2);border-left:4px solid #0000;grid-template-columns:3.25rem minmax(0,1fr);display:grid}.code li:before{content:counter(line);text-align:right;padding-right:calc(var(--u) * 2);color:var(--ink-2);user-select:none}.code code,.code li>span{font-size:inherit;white-space:pre-wrap;overflow-wrap:anywhere;text-indent:0}.code .comment{color:var(--ink-2)}.code li.flagged{background:var(--amber-surface);border-left-color:var(--amber-ink)}.code li.flagged:before{color:var(--amber-ink);font-weight:400}.line-flag{border:1px solid var(--amber-ink);color:var(--amber-ink);font-size:var(--step-meta);white-space:nowrap;margin-left:1ch;padding:0 .5ch;line-height:1.45;display:inline-block}.finding{padding:calc(var(--u) * 2) calc(var(--u) * 2.5) calc(var(--u) * 3)}.finding h3{font-size:1rem;font-weight:600;line-height:1.4}.finding dl{margin-top:calc(var(--u) * 1.5)}.finding dl>div{padding-block:calc(var(--u) * 1.25);border-top:1px solid var(--rule)}.finding dt{font-family:var(--mono);font-size:var(--step-meta);color:var(--ink-2)}.finding dd{margin:calc(var(--u) * .25) 0 0;font-size:1rem;line-height:1.5}.finding code{font-size:.9em}.verdict{align-items:center;gap:.5em;font-weight:600;display:inline-flex}.verdict:before{content:"";background:currentColor;flex:none;width:.8em;height:.8em}.verdict.green{color:var(--green-ink)}.verdict.green:before{border-radius:50%}.verdict.amber{color:var(--amber-ink)}.verdict.amber:before{clip-path:polygon(50% 0,100% 100%,0 100%);width:.9em}.verdict.red{color:var(--red-ink)}.figure-caption{padding:calc(var(--u) * 1.5) calc(var(--u) * 2);border-top:1px solid var(--ink);color:var(--ink-2);font-size:.9375rem}.figure-caption strong{color:var(--ink);font-weight:600}.timing svg{width:100%;min-width:720px;height:auto;color:var(--ink);display:block}.timing .axis,.timing .grid{stroke:var(--rule)}.timing .trace{stroke:var(--ink);fill:none;stroke-width:2px}.timing .trace-flag{stroke:var(--amber-ink);fill:none;stroke-width:2px}.timing .marker{stroke:var(--amber-ink);stroke-dasharray:4 4}.timing text{font-family:var(--mono);fill:var(--ink-2);font-size:13px}.timing text.signal{fill:var(--ink)}.timing text.flag{fill:var(--amber-ink)}.timing-body{padding:calc(var(--u) * 2);overflow-x:auto}.signup{max-width:40rem}.signup label{margin-bottom:var(--u);font-size:1rem;font-weight:600;display:block}.signup-row{gap:var(--u);flex-wrap:wrap;display:flex}.signup input[type=email]{min-width:0;font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--ink-2);border-radius:0;flex:16rem;padding:.65rem .75rem;font-size:1.0625rem}.signup input[type=email]::placeholder{color:var(--ink-2);opacity:1}.signup button{font:inherit;color:var(--paper);background:var(--accent);border:1px solid var(--accent);cursor:pointer;border-radius:0;flex:none;padding:.65rem 1.1rem;font-size:1rem;font-weight:600}.signup button:hover{text-underline-offset:.2em;text-decoration:underline}.signup .note{margin-top:calc(var(--u) * 1.5);color:var(--ink-2);max-width:var(--measure);font-size:.9375rem}.hp{width:1px;height:1px;position:absolute;top:auto;left:-10000px;overflow:hidden}.advisory{border-top:1px solid var(--ink)}.advisory-inner{grid-template-columns:var(--label-col) minmax(0, 1fr);gap:calc(var(--u) * 2) calc(var(--u) * 4);padding-block:calc(var(--u) * 5);display:grid}.advisory p:not(.label){max-width:var(--measure);font-size:1.0625rem}.advisory .label{padding-top:.25rem}.site-footer{border-top:1px solid var(--rule);color:var(--ink-2);font-size:.9375rem}.footer-inner{grid-template-columns:var(--label-col) minmax(0, 1fr) auto;gap:calc(var(--u) * 2) calc(var(--u) * 4);padding-block:calc(var(--u) * 4) calc(var(--u) * 6);align-items:baseline;display:grid}.footer-inner .wordmark{font-size:1.125rem}.footer-links{gap:var(--u) calc(var(--u) * 3);margin-top:var(--u);flex-wrap:wrap;padding:0;list-style:none;display:flex}.short-page .section-body p{max-width:var(--measure)}@media (width<=1020px){.code-and-finding{grid-template-columns:minmax(0,1fr)}.code{border-right:0;border-bottom:1px solid var(--rule)}}@media (width<=760px){:root{--gutter:16px}.page-head,.section,.advisory-inner,.footer-inner{grid-template-columns:minmax(0,1fr)}.page-head{padding-block:calc(var(--u) * 5) calc(var(--u) * 4)}.section{padding-block:calc(var(--u) * 4.5)}.def-rows>div{gap:calc(var(--u) * .5);grid-template-columns:minmax(0,1fr)}.ruled-list>li{gap:0 var(--u);grid-template-columns:2.25rem minmax(0,1fr)}.code li{padding-right:var(--u);grid-template-columns:2.25rem minmax(0,1fr)}.code li:before{padding-right:var(--u)}h2{font-size:1.625rem}}@media (width<=400px){body{font-size:1.0625rem}.code{font-size:.8125rem}.signup button{flex:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media print{.site-nav,.signup,.skip-link{display:none}body{color:#000;background:#fff}}
