:root{--q:13px;--row:calc(2 * var(--q));--p:6px;--lift:1px;--g:calc(var(--p) + var(--lift));--serif-asc:1.036;--serif-desc:.335;--sans-asc:1;--sans-desc:.2;--mono-asc:1.025;--mono-desc:.275;--text:calc(2 * var(--p) / (var(--serif-asc) - var(--serif-desc)));--label:13px;--small:17px;--code:14px;--W:50;--gap:4;--side:20;--col-x:2;--rule-x:1;--head:7;--paper:#f4faf0;--grid-1:#2e8c5409;--grid-2:#2e8c5416;--rule:#7fcddb;--hair:1px;--ink:#1c2b33;--ink-strong:#0b2a44;--ink-soft:#4b5f56;--note:#155f78;--accent:#e8457f;--pass:#2e8b57;--selection:#ff5e99;--slip:#fff;--slip-ink:#0b2f4d;--paper-edge:#14462829;--shadow-paper:0 0 0 .5px var(--paper-edge), 0 1px 1px #14462812, 0 2px 5px -2px #14462838;--shadow-lift:0 0 0 .5px var(--paper-edge), 0 2px 3px #14462814, 0 12px 20px -8px #14462852;--cast-paper:drop-shadow(0 .5px 1.5px #1446283d);--cast-lift:drop-shadow(0 .5px 1.5px #14462833) drop-shadow(0 5px 6px #14462833);--tint:#348c5621;--astro-code-foreground:#27414f;--astro-code-background:transparent;--astro-code-token-keyword:#c2336c;--astro-code-token-function:#1f5fad;--astro-code-token-string:#0b7a6e;--astro-code-token-string-expression:#0b7a6e;--astro-code-token-constant:#9a5d00;--astro-code-token-parameter:#27414f;--astro-code-token-punctuation:#536a77;--astro-code-token-comment:#5a7163;--astro-code-token-link:#155f78;color-scheme:light dark}@media (resolution>=2x){:root{--hair:.5px;--grid-1:#2e8c540e;--grid-2:#2e8c5424}}@media (width>=760px){:root{--q:14px;--p:7px;--code:16px}}@media (width>=1120px){.split{--rule-x:calc(var(--col-x) + var(--W) + var(--gap) / 2)}}@media (prefers-color-scheme:dark){:root{--paper:#0e2b47;--grid-1:#a0d2ff07;--grid-2:#a0d2ff13;--rule:#6ecde6b3;--ink:#d2dfea;--ink-strong:#f3f8fc;--ink-soft:#a3b8cb;--note:#8ad3ea;--accent:#ff7aa8;--pass:#5fcf8f;--slip:#1c4a75;--slip-ink:#f1f7fd;--paper-edge:#bee4ff29;--shadow-paper:0 0 0 .5px var(--paper-edge), 0 1px 1px #0008144d, 0 3px 7px -2px #00081480;--shadow-lift:0 0 0 .5px var(--paper-edge), 0 2px 3px #0008144d, 0 14px 22px -8px #000814a6;--cast-paper:drop-shadow(0 .5px 2px #0008148c);--cast-lift:drop-shadow(0 .5px 2px #00081480) drop-shadow(0 6px 7px #0008148c);--tint:#a0d2ff21;--astro-code-foreground:#d5e3ef;--astro-code-token-keyword:#ff8fb8;--astro-code-token-function:#8fc9ff;--astro-code-token-string:#86e3c6;--astro-code-token-string-expression:#86e3c6;--astro-code-token-constant:#ffd080;--astro-code-token-parameter:#d5e3ef;--astro-code-token-punctuation:#9cb4c8;--astro-code-token-comment:#86a1b8;--astro-code-token-link:#8ad3ea}}@media (prefers-color-scheme:dark) and (resolution>=2x){:root{--grid-1:#a0d2ff0a;--grid-2:#a0d2ff1c}}*,:before,:after{box-sizing:border-box}@view-transition{navigation:auto}::view-transition-group(*){animation-duration:.32s;animation-timing-function:cubic-bezier(.2,.7,.2,1)}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}}html{background:var(--paper);-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:clip}body{color:var(--ink);font-family:var(--font-serif);font-size:var(--text);line-height:var(--row);font-optical-sizing:auto;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0;overflow-x:clip}::selection{background:var(--selection);color:#fff}h1,h2,h3,h4,h5,h6,p,ul,ol,dl,dd,figure,blockquote,pre{margin:0}a{color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.sr-only{clip-path:inset(50%);white-space:nowrap;block-size:1px;inline-size:1px;position:absolute;overflow:hidden}.sheet{--sheet-w:min(100%, calc((var(--W) + var(--col-x) + 1) * var(--q)));isolation:isolate;inline-size:var(--sheet-w);min-block-size:round(up, 100dvh, var(--row));flex-direction:column;margin-inline-start:round(down, calc((100% - var(--sheet-w)) / 2), 1px);display:flex;position:relative}@media (width>=1120px){.sheet{--sheet-w:calc((2 * var(--col-x) + var(--W) + var(--gap) + var(--side)) * var(--q))}}.sheet:before{--ox:calc(100vw + var(--col-x) * var(--q));--rx:calc(100vw + var(--rule-x) * var(--q));--y0:calc(var(--head) * var(--q) + var(--g));content:"";z-index:-1;pointer-events:none;background:linear-gradient(var(--rule), var(--rule)) var(--rx) 0 / 1px 100% no-repeat, linear-gradient(var(--rule), var(--rule)) 0 var(--y0) / 100% 1px no-repeat, linear-gradient(to bottom, var(--grid-2) var(--hair), transparent var(--hair)) var(--ox) var(--y0) / var(--row) var(--row), linear-gradient(to right, var(--grid-2) var(--hair), transparent var(--hair)) var(--ox) var(--y0) / var(--row) var(--row), linear-gradient(to bottom, var(--grid-1) var(--hair), transparent var(--hair)) var(--ox) var(--y0) / var(--q) var(--q), linear-gradient(to right, var(--grid-1) var(--hair), transparent var(--hair)) var(--ox) var(--y0) / var(--q) var(--q);position:absolute;inset-block:0;inset-inline:-100vw}.masthead,.columns,.footer{inline-size:round(down, min(calc(var(--W) * var(--q)), calc(100% - (var(--col-x) + 1) * var(--q))), var(--row));margin-inline-start:calc(var(--col-x) * var(--q))}.columns{flex:1}.main{padding-block:calc(3 * var(--q)) calc(2 * var(--row))}.side{padding-block-end:calc(2 * var(--row))}@media (width>=1120px){.masthead,.columns{inline-size:calc((var(--W) + var(--gap) + var(--side)) * var(--q))}.masthead,.split .columns,.sheet:not(.split) .side{grid-template-columns:calc(var(--W) * var(--q)) calc(var(--side) * var(--q));column-gap:calc(var(--gap) * var(--q));display:grid}.split .side{padding-block-start:calc(3 * var(--q))}.sheet:not(.split) .side{align-items:start}.sheet:not(.split) .side>*{margin-block-start:0}}.t,.prose :is(h1,h2,h3,h4,h5,h6),.prose ol>li:before,.prose th,.prose pre{--asc:var(--sans-asc);--desc:var(--sans-desc);--A:round(calc(var(--asc) * var(--s)), 1px);--D:round(calc(var(--desc) * var(--s)), 1px);--b:calc(var(--A) + round(down, calc((var(--lh) - var(--A) - var(--D)) / 2), 1px));font-family:var(--font-sans);font-size:var(--s);line-height:var(--lh);translate:0 calc(mod(var(--p) - var(--b), var(--row)) - var(--q));display:block}.t-1{--s:48px;--lh:calc(2 * var(--row));color:var(--ink-strong);letter-spacing:-.015em;text-wrap:balance;font-weight:700}.t-2,.prose h2{--s:25px;--lh:var(--row);color:var(--ink-strong);letter-spacing:-.008em;text-wrap:balance;font-weight:700}.t-3,.prose h3{--s:20px;--lh:var(--row);color:var(--ink-strong);letter-spacing:-.005em;text-wrap:balance;font-weight:700}.prose :is(h4,h5,h6){--s:var(--label);--lh:var(--row);color:var(--ink-strong);letter-spacing:.06em;text-transform:uppercase;font-weight:700}.t-note{--s:var(--label);--lh:var(--row);color:var(--note);letter-spacing:.01em;font-weight:500}.t-note strong{font-weight:700}.t-small{--asc:var(--serif-asc);--desc:var(--serif-desc);--s:var(--small);--lh:var(--row);color:var(--ink-soft);font-family:var(--font-serif);text-wrap:pretty}@media (width<=759.98px){.t-1{--s:25px;--lh:var(--row);letter-spacing:-.008em}.t-2,.prose h2{--s:22px}}.prose a,.side a:not(.slip),.post-meta a,.page-intro a{--tilt:.1em;--cw:calc(max(var(--k,.5), 0) * var(--tilt));--ccw:calc(max(-1 * var(--k,.5), 0) * var(--tilt));--slant:calc(var(--cw) + var(--ccw));background:linear-gradient(to top right, var(--slip) calc(50% - .5px), transparent 50%) top / 100% var(--cw) no-repeat, linear-gradient(to bottom left, var(--slip) calc(50% - .5px), transparent 50%) bottom / 100% var(--cw) no-repeat, linear-gradient(to top left, var(--slip) calc(50% - .5px), transparent 50%) top / 100% var(--ccw) no-repeat, linear-gradient(to bottom right, var(--slip) calc(50% - .5px), transparent 50%) bottom / 100% var(--ccw) no-repeat, linear-gradient(var(--slip), var(--slip)) 0 var(--slant) / 100% calc(100% - 2 * var(--slant)) no-repeat;filter:var(--cast-paper);color:var(--slip-ink);-webkit-box-decoration-break:clone;box-decoration-break:clone;margin-inline:-1px;padding:0 3px;text-decoration:none;transition:filter .18s}.prose sup a,.topic-list a,.post-meta a{position:relative}.prose sup a:after,.topic-list a:after,.post-meta a:after{content:"";position:absolute}.prose sup a:after{inset:-7px -10px}.topic-list a:after,.post-meta a:after{inset:calc((1.2em - var(--row)) / 2) -4px}.prose a:hover,.side a:not(.slip):hover,.post-meta a:hover,.page-intro a:hover{filter:var(--cast-lift)}.icon{inline-size:var(--q);block-size:var(--q);fill:none;stroke:currentColor;stroke-width:1.75px;stroke-linecap:round;stroke-linejoin:round;flex:none}.with-icon{column-gap:var(--q);display:flex}.with-icon>.icon{margin-block-start:calc(var(--b) - var(--q) + 2px)}.slip{block-size:var(--row);inline-size:calc(var(--w,6) * var(--q));color:var(--slip-ink);font-family:var(--font-sans);font-size:var(--label);letter-spacing:.01em;white-space:nowrap;flex:none;justify-content:center;align-items:center;gap:.45em;font-weight:600;line-height:1;text-decoration:none;transition:translate .18s cubic-bezier(.2,.7,.3,1);display:inline-flex}.slip:hover{translate:0 -1px}.slip:active{translate:0}.slip,.card{isolation:isolate;position:relative}.slip:before,.card:before{content:"";z-index:-1;background:var(--slip);box-shadow:var(--shadow-paper);rotate:calc(var(--k,.5) * var(--turn));border-radius:1px;transition:box-shadow .18s cubic-bezier(.2,.7,.3,1);position:absolute;inset:0}.slip{--turn:2.5deg}.card{--turn:.4deg}.slip:hover:before,a.card:hover:before{box-shadow:var(--shadow-lift)}.slip:active:before{box-shadow:0 0 0 .5px var(--paper-edge)}.slips{gap:var(--q);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.slips>li{display:flex}.card{padding:calc(var(--q) - var(--g)) var(--q) var(--g);color:var(--slip-ink);text-decoration:none;transition:translate .18s cubic-bezier(.2,.7,.3,1);display:block}a.card:hover{translate:0 -1px}.cards{gap:var(--row);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:0;list-style:none;display:grid}.card-title{display:block}.skip-link{inset:var(--g) auto auto var(--q);z-index:10;position:absolute;translate:0 -200%}.skip-link:focus{translate:none}.masthead{align-items:flex-end;column-gap:var(--row);block-size:calc(var(--head) * var(--q));padding-block-end:var(--q);display:flex}.wordmark{--s:30px;--lh:var(--row);color:var(--ink-strong);letter-spacing:-.02em;justify-self:start;font-weight:700;text-decoration:none}.tagline{color:var(--ink-soft)}@media (width>=1120px){.masthead{align-items:end;column-gap:calc(var(--gap) * var(--q));display:grid}}@media (width<=419.98px){.tagline{display:none}}.year-group+.year-group{margin-block-start:var(--row)}.year{color:var(--note)}.index{margin:0;padding:0;list-style:none}.index-item{column-gap:var(--row);grid-template-columns:minmax(0,1fr) auto;display:grid}.index-item+.index-item{margin-block-start:var(--row)}.index-title{text-decoration:none}.index-title:hover{color:var(--note)}.index-date{text-align:end;white-space:nowrap}.index-summary{-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;grid-column:1/-1;display:-webkit-box;overflow:hidden}.draft{color:var(--accent)}.page-head+*,.post-head+.prose{margin-block-start:var(--row)}.post-meta{column-gap:var(--row);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.post-meta .with-icon{column-gap:calc(var(--q) / 2)}.post-meta .tag-links a+a{margin-inline-start:.5em}.post-foot{margin-block-start:calc(5 * var(--q) + var(--g));padding-block-end:calc(2 * var(--q) - var(--g))}.post-nav .next{text-align:end;grid-column:2}.side-block+.side-block{margin-block-start:var(--row)}.label{font-weight:700}.about{display:flow-root}.about img{inline-size:calc(3 * var(--row));block-size:calc(3 * var(--row));margin-block:var(--g) calc(2 * var(--q) - var(--g));object-fit:cover;box-shadow:var(--shadow-paper);border-radius:1px;display:block}.about .slips{margin-block-start:calc(var(--q) + var(--g));padding-block-end:calc(var(--q) - var(--g))}.about .slip .icon{stroke-width:1.6px;block-size:16px;inline-size:16px}@media (width>=1120px){.sheet:not(.split) .about{column-gap:var(--row);grid-template-rows:auto 1fr;grid-template-columns:auto minmax(0,1fr);display:grid}.sheet:not(.split) .about img{grid-row:1/span 2}.sheet:not(.split) .about .slips{grid-column:2}}.topic-list{flex-wrap:wrap;column-gap:1.2em;margin:0;padding:0;list-style:none;display:flex}.topic-list .count{opacity:.6}.topic-list [aria-current=page]{font-weight:700}.link-list{padding:0 0 0 var(--q);margin:0;list-style:none}.link-list li{position:relative}.link-list li:before{content:"";background:var(--note);block-size:4px;inline-size:4px;position:absolute;inset-block-start:calc(var(--q) + var(--p) - .36em - 2px);inset-inline-start:calc(-1 * var(--q))}.prose{overflow-wrap:break-word;display:flow-root;container-type:inline-size}.prose>*+*{margin-block-start:var(--row)}.prose p,.prose li{text-wrap:pretty}.prose>h2{margin-block-start:calc(2 * var(--row))}.prose>:is(h2,h3,h4,h5,h6)+*,.prose>:is(h2,h3,h4,h5,h6):first-child{margin-block-start:0}.prose strong,.prose b{color:var(--ink-strong);font-weight:650}.prose :is(ul,ol){padding-inline-start:var(--row)}.prose ul{list-style:none}.prose ul>li{position:relative}.prose ul>li:before{content:"";background:var(--note);block-size:5px;inline-size:5px;position:absolute;inset-block-start:calc(var(--q) + var(--p) - .36em - 2.5px);inset-inline-start:calc(-1 * var(--q) - 2.5px)}.prose ol{counter-reset:item;list-style:none}.prose ol>li{counter-increment:item;position:relative}.prose ol>li:before{--s:var(--label);--lh:var(--row);content:counter(item);inline-size:var(--q);color:var(--note);font-variant-numeric:tabular-nums;text-align:end;font-weight:700;position:absolute;inset-block-start:0;inset-inline-start:calc(-1 * var(--row))}.prose :is(li,blockquote)>:is(p,ul,ol,pre,table,blockquote)+:is(p,ul,ol,pre,table,blockquote),.prose li:has(>p)+li,.prose li+li:has(>p){margin-block-start:var(--row)}.prose :is(h1,h2,h3,h4,h5,h6) a,.prose a:has(>img){filter:none;color:inherit;background:0 0;margin:0;padding:0}.prose :is(h1,h2,h3,h4,h5,h6) a:hover{color:var(--note)}.prose :is(code,sup,sub,small,kbd){line-height:0}.prose :not(pre)>code{background:var(--tint);color:var(--ink-strong);font-family:var(--font-mono);border-radius:2px;padding:.14em .32em;font-size:.82em}.prose sup{font-family:var(--font-sans);font-size:.68em;font-weight:600}.prose sup a{filter:none;color:var(--note);background:0 0;margin:0;padding:0 1px}.prose blockquote{background:linear-gradient(var(--rule), var(--rule)) var(--q) var(--g) / 1px calc(100% - var(--q)) no-repeat;color:var(--ink-soft);padding-inline-start:var(--row);font-style:italic}.prose pre{--asc:var(--mono-asc);--desc:var(--mono-desc);--s:var(--code);--lh:var(--row);color:var(--astro-code-foreground);font-family:var(--font-mono);font-variant-ligatures:none;white-space:pre-wrap;overflow-wrap:anywhere;tab-size:2;overflow:visible;background:0 0!important}.prose pre code{font:inherit}.prose pre .line{vertical-align:top;inline-size:100%;text-indent:calc((var(--i,0) + 2) * -1ch);padding-inline-start:calc((var(--i,0) + 2) * 1ch);display:inline-block}.prose pre span[style*=token-comment]{font-style:italic}.prose :is(.figure,.box),.prose>img:not(.alignleft,.alignright),.prose figure>img{margin-block:calc(var(--q) + var(--g)) calc(2 * var(--q) - var(--g))}.prose :is(.figure,.box)+*,.prose>img:not(.alignleft,.alignright)+*,.prose figure>img+*{margin-block-start:0}.prose :is(.figure,.box)+:is(.figure,.box),.prose>img:not(.alignleft,.alignright)+:is(.figure,.box,img),.prose>:is(.figure,.box)+img:not(.alignleft,.alignright){margin-block-start:calc(3 * var(--q))}.prose :is(.figure,.box)+h2,.prose>img:not(.alignleft,.alignright)+h2{margin-block-start:calc(var(--row) + 2 * var(--q) - var(--g))}.prose figure{margin-block-start:0;display:flow-root}.prose img{--iw:round(down, min(100cqi, calc(var(--w,320) * 1px)), var(--q));--ih:calc(var(--iw) * var(--h,240) / var(--w,320));inline-size:var(--iw);block-size:calc(round(nearest, calc(var(--ih) - var(--q)), var(--row)) + var(--q));object-fit:cover;max-inline-size:100%;box-shadow:var(--shadow-paper);background:#fff;border-radius:1px;display:block}.prose :is(.centered,.aligncenter){margin-inline:auto}@media (width>=760px){.prose .float{display:contents}.prose>:is(.float,.alignleft,.alignright):first-child+*{margin-block-start:0}.prose :is(.alignleft,.alignright){block-size:round(nearest, var(--ih), var(--q))}.prose .alignleft{float:left;margin:var(--g) var(--row) calc(var(--q) - var(--g)) 0}.prose .alignright{float:right;margin:var(--g) 0 calc(var(--q) - var(--g)) var(--row)}}@media (width<=759.98px){.prose>:is(.float,.alignleft,.alignright){margin-block:calc(var(--q) + var(--g)) calc(2 * var(--q) - var(--g))}.prose>:is(.float,.alignleft,.alignright)+*{margin-block-start:0}}.prose table{scrollbar-width:none;border-spacing:0;font-variant-numeric:tabular-nums;max-inline-size:100%;display:block;overflow-x:auto}.prose table::-webkit-scrollbar{display:none}.prose :is(th,td){padding:0 var(--row) 0 0;text-align:start;vertical-align:top}.prose :is(th,td):last-child{padding-inline-end:0}.prose tr:has(>th){background:linear-gradient(var(--rule), var(--rule)) 0 calc(100% - (2 * var(--q) - var(--g) - 1px)) / 100% 1px no-repeat}.prose td:first-child{white-space:nowrap}.prose th{--s:var(--label);--lh:var(--row);vertical-align:bottom;color:var(--note);letter-spacing:.01em;padding-block-end:var(--row);font-weight:700;display:table-cell}.prose table a{filter:none;text-decoration:underline;text-decoration-color:var(--rule);text-underline-offset:3px;background:0 0;margin:0;padding:0;text-decoration-thickness:1px}.prose table a:hover{filter:none;text-decoration-color:currentColor}.prose hr{block-size:calc(2 * var(--row));background:linear-gradient(var(--rule), var(--rule)) 0 calc(var(--q) + var(--g)) / 100% 1px no-repeat;border:0}.prose :is(.caption,.promotion,figcaption){color:var(--ink-soft);font-style:italic}.prose :is(.footnotes,section[data-footnotes]){color:var(--ink-soft);margin-block-start:calc(2 * var(--row))}.prose :is(.pass,.fail){font-weight:650}.prose .pass{color:var(--pass)}.prose .fail{color:var(--accent)}.prose .demo-row{color:#fff;display:flex}.prose .demo-row>div{padding:calc(var(--q) - var(--g)) var(--q) var(--g)}.footer{padding-block-end:calc(2 * var(--row))}.colophon{column-gap:var(--row);color:var(--ink-soft);flex-wrap:wrap;display:flex}.colophon a{color:var(--note);text-decoration:none}.colophon a:hover{color:var(--ink-strong)}.colophon .with-icon{column-gap:calc(var(--q) / 2)}@media (width<=759.98px){.cards{row-gap:calc(3 * var(--q));grid-template-columns:minmax(0,1fr)}.post-nav .next{text-align:start;grid-column:1}}@media (prefers-reduced-motion:reduce){.slip,.card{transition:none}}
