:root{color-scheme:dark;--bg:#0c0c0c;--fg:#d4d4d4;--muted:#7a7a7a;--rule:#262626;--code-bg:#161616;--accent:#ff5f5f}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0 auto;max-width:79ch;padding:2rem 1.25rem 3rem;background:var(--bg);color:var(--fg);font:16px/1.75 ui-monospace,sf mono,jetbrains mono,Menlo,Consolas,liberation mono,monospace}a{color:inherit;text-decoration:underline;text-decoration-color:var(--muted);text-underline-offset:2px}a:hover{color:var(--accent);text-decoration-color:var(--accent)}::selection{background:var(--accent);color:var(--bg)}header{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;justify-content:space-between;margin-bottom:3rem}header .brand{text-decoration:none;font-weight:700}header .brand::before{content:"~/";color:var(--muted)}h1,h2,h3,h4{font-size:1em;font-weight:700;line-height:1.4;margin:2.5em 0 .8em}h1{font-size:1.3em;margin:0 0 .4em}h2{font-size:1.1em}h1::before{content:"# ";color:var(--muted)}h2::before{content:"## ";color:var(--muted)}h3::before{content:"### ";color:var(--muted)}p,ul,ol,dl,pre,blockquote,table{margin:0 0 1.4em}li+li{margin-top:.35em}.muted{color:var(--muted)}hr{border:0;border-top:1px dashed var(--rule);margin:2em 0}section.year{margin-bottom:2.5em}section.year h2{font-size:1em;color:var(--muted);font-weight:400;margin:0 0 1em}section.year h2::before{content:none}ul.posts{list-style:none;padding:0;margin:0}ul.posts li{display:grid;grid-template-columns:1fr auto;column-gap:2ch;margin:0 0 1.6em}ul.posts .title{font-weight:700;text-decoration:none}ul.posts .title:hover{color:var(--accent)}ul.posts time{color:var(--muted);white-space:nowrap;font-size:.9em;padding-top:.1em}ul.posts p{grid-column:1/-1;margin:.3em 0 0;color:var(--muted);font-size:.9em;line-height:1.6}ul.posts .tag{grid-column:1/-1;color:var(--accent);font-size:.9em}@media(max-width:600px){body{font-size:15px}ul.posts li{grid-template-columns:1fr}ul.posts time{grid-row:1}}code,pre{font-family:inherit;font-size:.9em}pre code{font-size:1em}:not(pre)>code{background:var(--code-bg);padding:.05em .35em}pre{tab-size:4;background:var(--code-bg);padding:1em 1.25em;overflow-x:auto;line-height:1.55;border-left:2px solid var(--rule)}blockquote{margin-left:0;padding-left:1em;border-left:2px solid var(--rule);color:var(--muted)}img{max-width:100%;height:auto}table{border-collapse:collapse;width:100%;display:block;overflow-x:auto}th,td{border:1px solid var(--rule);padding:.3em .6em;text-align:left}dl.advisory,dl.timeline{display:grid;grid-template-columns:max-content 1fr;gap:.15em 2ch}dl.advisory{border:1px dashed var(--rule);padding:1em}dt{color:var(--muted)}dd{margin:0}footer{margin-top:4rem;padding-top:1rem;border-top:1px dashed var(--rule);color:var(--muted);display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem 2ch;font-size:.9em}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cs,.chroma .ch,.chroma .cp,.chroma .cpf{color:var(--muted);font-style:italic}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kr,.chroma .kt,.chroma .kc,.chroma .nt{font-weight:700}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sb,.chroma .sc,.chroma .sd,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr{color:var(--accent)}.chroma .gd{color:var(--accent)}.chroma .gi{font-weight:700}.chroma .err{color:var(--accent);text-decoration:underline wavy}pre.art{background:0 0;border:0;padding:0;margin:0 auto .75rem;width:max-content;max-width:100%;overflow:hidden;font-size:clamp(6px,2.1vw,13px);line-height:1;height:26em;color:var(--fg);user-select:none}pre.art .g{color:var(--accent)}a.art-link{display:block;text-decoration:none;cursor:pointer}a.art-link:focus-visible{outline:1px dashed var(--muted);outline-offset:4px}.art-fallback{text-align:center}footer a{text-decoration:none}.intro{max-width:64ch;margin:0 auto;color:var(--muted)}.post-hero{display:block;width:100%;height:auto;border:1px solid var(--rule);margin-bottom:2rem}.post-body img{display:block;max-width:100%;height:auto;margin:1.75em auto;border:1px solid var(--rule)}.post-body img.post-logo{border:0}.post-body figure{margin:1.75em 0}.post-body figcaption{color:var(--muted);text-align:center;font-size:.9em;margin-top:.6em}.post-body iframe{display:block;width:100%;margin:1.75em auto;border:0}.post-body details{margin:0 0 1.25em}.post-body summary{cursor:pointer;color:var(--muted)}.book-subtitle{color:var(--muted);margin-top:-.5em}.table-wrap{overflow-x:auto;margin:0 0 1.25em}.table-wrap table{display:table;margin:0}th{background:var(--code-bg)}.ta-left{text-align:left}.ta-center{text-align:center}.ta-right{text-align:right}.post-body .diagram{width:min(960px,100vw - 2.5rem);margin-left:50%;transform:translateX(-50%)}.post-body .diagram svg{display:block;width:100%;height:auto;max-height:max(80vh,660px);margin:0 auto;font-family:inherit}.post-body .diagram figcaption{max-width:79ch;margin-left:auto;margin-right:auto}.post-body svg [fill="#fcfcf9"]{fill:var(--bg)}.post-body svg [fill="#f4f3ec"]{fill:var(--code-bg)}.post-body svg [fill="#fdecea"]{fill:#2a1414}.post-body svg [fill="#74746b"]{fill:var(--muted)}.post-body svg [fill="#b3261e"]{fill:var(--accent)}.post-body svg [stroke="#b3261e"]{stroke:var(--accent)}.cryptography-book .book-figure img{filter:invert(.88)hue-rotate(180deg);border:0}