@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/IBMPlexMono-Regular.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/IBMPlexMono-Bold.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(/fonts/IBMPlexMono-Italic.woff2) format("woff2")}:root{--bg: #ffffff;--page-bg: #000080;--text: #111111;--muted: #666666;--rule: #111111;--grid-unfilled: #cccccc;--border: #111111;--hover-bg: #8b0000;--hover-text: #ffffff}html.dark{--bg: #000000;--page-bg: #000000;--text: #ffb000;--muted: #cc8800;--rule: #664400;--grid-unfilled: #442200;--border: #ffb000;--hover-bg: #ffffff;--hover-text: #000000}::selection{background:#8b0000;color:#fff}html.dark ::selection{background:#ffb000;color:#000}*,*:before,*:after{box-sizing:border-box}html{font-size:16px}@media(min-width:640px){html{font-size:17px}}body{font-family:JetBrains Mono,IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1rem;line-height:1.65;font-weight:400;background-color:var(--page-bg);color:var(--text);margin:0;padding:0}.skip-link{position:absolute;top:-100%;left:0;z-index:9999;padding:.5rem 1rem;background:var(--text);color:var(--bg);text-decoration:none;font-size:.875rem}.skip-link:focus{top:0}:focus-visible{outline:2px solid var(--text);outline-offset:2px}.container{max-width:calc(62ch + 48px);margin:2rem auto;padding:2.5rem 24px 2rem;background-color:var(--bg);border:1px solid var(--border)}@media(min-width:640px){.container{max-width:calc(62ch + 64px);padding-left:32px;padding-right:32px}}@media(max-width:480px){.container{margin:0 auto;border-left:none;border-right:none}}p{margin-top:0;margin-bottom:24px}h1,h2,h3,h4,h5,h6{font-family:JetBrains Mono,IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700;margin:0}h1{font-size:1.75rem;line-height:1.2}h2{font-size:1.25rem;line-height:1.3}h3{font-size:1rem;line-height:1.4}@media(min-width:640px){h1{font-size:1.882rem}h2{font-size:1.294rem}}a{color:var(--text);text-decoration:underline;transition:background-color .1s,color .1s}a:visited{color:var(--text)}a:hover{background-color:var(--hover-bg);color:var(--hover-text);text-decoration:none}a:focus-visible{outline:2px solid var(--text);outline-offset:2px}hr{border:none;border-top:1px solid var(--rule);margin:32px 0}.extlink{display:inline-block;font-size:.875em;line-height:1;border:1px solid currentColor;padding:0 .15em;margin-left:.25em;vertical-align:super;font-style:normal}header{margin-bottom:40px}.header-pre{font-size:.875rem;color:var(--muted);margin:0 0 .25rem;letter-spacing:.02em}header h1{font-size:1.75rem;font-weight:700;line-height:1.2;letter-spacing:.02em}@media(min-width:640px){header h1{font-size:1.882rem}}header h1 a{color:var(--text);text-decoration:none}header h1 a:hover{background:none;color:var(--text);text-decoration:none}header h1 a:visited{color:var(--text)}header hr{border:none;border-top:3px double var(--text);margin:.5rem 0 0}header .header-rule-top{margin:0 0 .5rem}footer{margin-top:40px;border-top:1px solid var(--rule);padding-top:.75rem}.footer-nav{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin-bottom:1rem}.footer-nav a{display:inline-flex;align-items:center;min-height:44px;color:var(--text);font-size:.875rem;text-decoration:underline}.footer-nav a:visited{color:var(--text)}.footer-nav a:hover{background-color:var(--hover-bg);color:var(--hover-text);text-decoration:none;padding:0 .2rem}.footer-bottom{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.footer-copy{font-size:.875rem;color:var(--muted);margin:0}.footer-theme{display:flex;align-items:center;gap:.25rem;font-size:.875rem;color:var(--muted);margin:0}.theme-btn{background:none;border:none;font-family:inherit;font-size:inherit;color:var(--muted);cursor:pointer;padding:0;text-decoration:underline;min-height:44px;display:inline-flex;align-items:center;transition:color .1s}.theme-btn:hover{color:var(--text)}.theme-btn.active{color:var(--text);font-weight:700;text-decoration:none}.lesson-grid{display:grid;grid-template-columns:repeat(7,3ch);column-gap:2ch;row-gap:.35rem;margin-bottom:2.5rem;font-size:1rem;line-height:1.65}@media(max-width:420px){.lesson-grid{grid-template-columns:repeat(5,3ch);column-gap:1.5ch}}.lesson-grid a{color:var(--text);text-decoration:none;display:block}.lesson-grid a:hover{background-color:var(--hover-bg);color:var(--hover-text);text-decoration:none}.lesson-grid a:visited{color:var(--text)}.lesson-grid .lesson-unfilled{color:var(--grid-unfilled);display:block}.page-title,.post-section h2.page-title{font-size:1.25rem;font-weight:700;margin-bottom:0;letter-spacing:.02em;text-transform:none;color:var(--text)}.title-rule{border:none;border-top:1px solid var(--rule);margin:.4rem 0 2rem;width:6ch}.post-section{margin-bottom:2rem}.post-section h2{font-size:.875rem;font-weight:700;margin-bottom:.25rem;letter-spacing:.06em;text-transform:uppercase}pre.metadata{background:none;border:none;padding:0;margin:0 0 24px;font-family:inherit;font-size:.875rem;line-height:1.65;overflow-x:auto;white-space:pre}.post-nav{display:flex;justify-content:space-between;margin-bottom:2rem;font-size:.875rem}.post-nav .nav-prev{text-align:left}.post-nav .nav-next{text-align:right}.description{margin-bottom:40px}.description p{font-size:1rem}.latest-block{margin-bottom:2rem}.latest-label{margin-bottom:0;font-size:.875rem}.latest-topic{margin-bottom:0;color:var(--muted);font-size:.875rem;font-style:italic}.post-lesson-label{font-size:.875rem;color:var(--muted);margin:0 0 .5rem}.post-lesson-line{font-size:1.25rem;font-weight:700;margin:0 0 1.5rem;line-height:1.3}@media(min-width:640px){.post-lesson-line{font-size:1.294rem}}.glossary-letter{margin-bottom:2rem}.glossary-letter h3{font-size:.875rem;font-weight:700;margin-bottom:.5rem;letter-spacing:.06em;text-transform:uppercase}.glossary-entry{font-family:inherit;font-size:.875rem;margin-bottom:.25rem;display:flex;justify-content:space-between;align-items:baseline;gap:.5rem;min-width:0}.glossary-term{flex:1;min-width:0;overflow-wrap:break-word;color:var(--text)}.glossary-ref{flex-shrink:0;white-space:nowrap;color:var(--muted);font-size:.875rem}.tags-list{font-family:inherit;font-size:1rem}.tag-entry{margin-bottom:.25rem}.tag-entry a{color:var(--text);text-decoration:none}.tag-entry a:visited{color:var(--text)}.tag-entry a:hover{background-color:var(--hover-bg);color:var(--hover-text);text-decoration:none}.archive-list{margin-bottom:2rem}.archive-row{display:grid;grid-template-columns:8ch 1fr;gap:1ch;margin-bottom:.35rem;align-items:baseline}.archive-link{color:var(--text);text-decoration:underline;font-size:.875rem;white-space:nowrap}.archive-link:hover{background-color:var(--hover-bg);color:var(--hover-text);text-decoration:none}.archive-link:visited{color:var(--text)}.archive-lesson{font-size:.875rem;color:var(--muted)}.subscribe-form{margin-top:1.5rem}.subscribe-row{display:flex;gap:1ch;align-items:center}.subscribe-row input[type=email]{font-family:inherit;font-size:1rem;background:var(--bg);color:var(--text);border:1px solid var(--rule);padding:.25rem .5rem;flex:1;min-width:0}.subscribe-row input[type=email]::placeholder{color:var(--muted)}.subscribe-row button{font-family:inherit;font-size:1rem;background:transparent;color:var(--text);border:1px solid var(--rule);padding:.25rem 1ch;cursor:pointer;white-space:nowrap;transition:background-color .1s,color .1s}.subscribe-row button:hover{background-color:var(--hover-bg);color:var(--hover-text)}.subscribe-row button:disabled{opacity:.5;cursor:default}.subscribe-msg{margin-top:.75rem;font-size:.875rem;color:var(--muted);min-height:1.2em}.subscribe-error{color:var(--text)}.copy-btn{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;color:var(--muted);cursor:pointer;padding:2px;border-radius:2px;vertical-align:middle;line-height:1;transition:color .1s,background .1s}.copy-btn:hover{color:var(--text);background:#0000000f}html.dark .copy-btn:hover{background:#ffb0001a}.copy-btn svg{display:block}.copy-btn[data-copied]{font-family:JetBrains Mono,IBM Plex Mono,monospace;font-size:.875rem;color:var(--text)}
