@font-face{font-family:"JetBrains Mono";src:url("fonts/jetbrains-mono.woff2") format("woff2");font-weight:100 800;font-style:normal;font-display:swap}@font-face{font-family:"JetBrains Mono";src:url("fonts/jetbrains-mono-italic.woff2") format("woff2");font-weight:100 800;font-style:italic;font-display:swap}@font-face{font-family:"NewCM Math";src:url("fonts/newcm-math.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{color-scheme:light dark;--rosewater: light-dark(#dc8a78, #f5e0dc);--flamingo: light-dark(#dd7878, #f2cdcd);--pink: light-dark(#ea76cb, #f5c2e7);--mauve: light-dark(#8839ef, #cba6f7);--red: light-dark(#d20f39, #f38ba8);--maroon: light-dark(#e64553, #eba0ac);--peach: light-dark(#fe640b, #fab387);--yellow: light-dark(#df8e1d, #f9e2af);--green: light-dark(#40a02b, #a6e3a1);--teal: light-dark(#179299, #94e2d5);--sky: light-dark(#04a5e5, #89dceb);--sapphire: light-dark(#209fb5, #74c7ec);--blue: light-dark(#1e66f5, #89b4fa);--lavender: light-dark(#7287fd, #b4befe);--text: light-dark(#4c4f69, #cdd6f4);--subtext1: light-dark(#5c5f77, #bac2de);--subtext0: light-dark(#6c6f85, #a6adc8);--overlay0: light-dark(#9ca0b0, #6c7086);--surface1: light-dark(#bcc0cc, #45475a);--surface0: light-dark(#ccd0da, #313244);--base: light-dark(#eff1f5, #1e1e2e);--mantle: light-dark(#e6e9ef, #181825);--crust: light-dark(#dce0e8, #11111b);--bg: var(--base);--fg: var(--text);--muted: light-dark(#5c5f77, #a6adc8);--accent: light-dark(#1d5fe8, #89b4fa);--rule: var(--surface0);--code-bg: var(--mantle);--oa-a: light-dark(#fe640b, #e85a0a);--oa-b: #8839ef;--oa-size-0: light-dark(#73a3fc, #2953a5);--oa-size-1: light-dark(#5381d6, #4874c9);--oa-size-2: light-dark(#345fb2, #6796ee);--oa-size-3: light-dark(#163f8e, #96bbfe);--measure: 72ch;--body: "JetBrains Mono", ui-monospace, monospace;--ui: var(--body);--mono: var(--body);--w-text: 400;--w-bold: 800}@view-transition{navigation:auto}@media (prefers-reduced-motion: reduce){@view-transition{navigation:none}}*{box-sizing:border-box}body{margin:0 auto;padding:0 1rem;max-width:calc(var(--measure) + 2rem);background:var(--bg);color:var(--fg);font:1rem/1.7 var(--body);font-weight:var(--w-text);font-kerning:normal;text-rendering:optimizeLegibility;font-variant-ligatures:none}h1,h2,h3{font-family:var(--ui);font-weight:var(--w-bold);line-height:1.2;text-wrap:balance}strong,b{font-weight:var(--w-bold)}h1{font-size:2rem;margin:2.5rem 0 .5rem}h2{font-size:1.35rem;margin-top:2.5rem}p,li{text-wrap:pretty}article>:is(p,ul,ol){hyphens:auto;hyphenate-limit-chars:6 3 2;overflow-wrap:break-word}@media (min-width: 36em){article>:is(p,ul>li,ol>li){text-align:justify}}.table-wrap{width:max-content;max-width:100%;margin:1.5rem auto;overflow-x:auto}.table-wrap:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.table-wrap>table{border-collapse:collapse;font:.9rem/1.45 var(--ui);font-variant-numeric:tabular-nums lining-nums}.table-wrap>table th,.table-wrap>table td{padding:.35rem .75rem;vertical-align:baseline}.table-wrap>table th{font-weight:var(--w-bold);text-align:left;border-bottom:2px solid var(--surface1)}.table-wrap>table td{border-bottom:1px solid var(--rule)}.table-wrap>table tbody tr:last-child td{border-bottom:none}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:.2em}a:hover{text-decoration-thickness:2px}header.site{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;align-items:baseline;justify-content:space-between;padding:1.5rem 0;border-bottom:1px solid var(--rule);font-family:var(--ui)}header.site .name{color:var(--fg);font-weight:var(--w-bold);text-decoration:none;view-transition-name:site-name}header.site nav{display:flex;gap:1rem}footer.site{margin:4rem 0 2rem;padding-top:1rem;border-top:1px solid var(--rule);color:var(--muted);font:.875rem var(--ui)}.meta,.hint{color:var(--muted);font:.9rem var(--ui)}figure.psql{margin:1rem 0 1.5rem;font:.9rem/1.7 var(--mono)}figure.psql .psql-query{color:var(--muted);font-variant-ligatures:none}figure.psql .psql-prompt{color:var(--fg)}figure.psql .psql-where{color:var(--accent)}figure.psql table{border-collapse:collapse;margin:.25rem 0}figure.psql th{padding:0 1ch;font-weight:var(--w-text);text-align:center;border-bottom:1px dashed var(--overlay0)}figure.psql td{padding:0 1ch;vertical-align:top;white-space:nowrap}figure.psql th+th,figure.psql td+td{border-left:1px solid var(--overlay0)}figure.psql time{color:var(--muted)}figure.psql .psql-num{text-align:right;color:var(--muted)}figure.psql .psql-title{white-space:normal}figure.psql .psql-tags{color:var(--muted)}figure.psql .psql-tag{padding:0 .2ch;border:none;border-radius:3px;background:none;color:var(--mauve);font:inherit;cursor:pointer}figure.psql .psql-tag:hover{text-decoration:underline}figure.psql .psql-tag[aria-pressed=true]{background:var(--accent);color:var(--base)}figure.psql .psql-count{color:var(--muted)}@media (max-width: 40rem){figure.psql thead{display:none}figure.psql table,figure.psql tbody,figure.psql tr{display:block}figure.psql tbody{counter-reset:record}figure.psql tr{counter-increment:record}figure.psql tr[hidden]{display:none}figure.psql tr::before{content:"-[ RECORD " counter(record) " ]------------------------------------------";display:block;overflow:hidden;white-space:nowrap;color:var(--muted)}figure.psql td{display:grid;grid-template-columns:6ch 1fr;padding:0;white-space:normal}figure.psql td+td{border-left:none}figure.psql td::before{content:attr(data-label);margin-right:1ch;border-right:1px solid var(--overlay0);color:var(--muted)}figure.psql td>*{padding-left:1ch}figure.psql .psql-num{text-align:left}}code{font-family:var(--mono);font-variant-ligatures:contextual}:not(pre)>code{padding:.1em .3em;border-radius:4px;background:var(--code-bg)}pre{overflow-x:auto;background-color:var(--mantle) !important;padding:1rem;border-radius:8px;border:1px solid var(--rule);font-size:.95rem;line-height:1.5}figure.demo{margin:2rem 0}figure.demo canvas{display:block;width:100%;max-width:512px;aspect-ratio:1;margin:0 auto;border-radius:8px;background:var(--code-bg);border:1px solid var(--rule)}figure.demo .demo-controls{display:flex;flex-wrap:wrap;gap:.5rem .75rem;align-items:center;justify-content:center;margin-top:.75rem;font:.9rem var(--mono)}figure.demo .demo-controls input{accent-color:var(--accent)}figure.demo .demo-controls button{padding:.25rem .75rem;border:1px solid var(--rule);border-radius:6px;background:var(--mantle);color:var(--fg);font:inherit;cursor:pointer}figure.demo .demo-controls button[aria-pressed=true]{border-color:var(--accent);background:var(--accent);color:var(--base)}figure.demo .demo-readout{margin:.5rem 0 0;color:var(--subtext1);font:.85rem/1.5 var(--mono);text-align:center}figure.demo canvas[aria-label]{cursor:crosshair;touch-action:none}figure.demo .oa{font-family:var(--ui)}figure.demo .oa-tiles{display:grid;grid-template-columns:repeat(auto-fit, minmax(12rem, 1fr));gap:.75rem;margin-bottom:1.25rem}figure.demo .oa-tile{padding:.75rem 1rem;border:1px solid var(--rule);border-radius:8px;background:var(--mantle)}figure.demo .oa-tile p{margin:0}figure.demo .oa-tile-name{color:var(--subtext1);font-size:.85rem}figure.demo .oa-tile-value{color:var(--fg);font:600 1.9rem/1.2 var(--ui);font-variant-numeric:tabular-nums}figure.demo .oa-tile-note{color:var(--muted);font-size:.8rem}figure.demo .oa-swatch{display:inline-block;width:.7rem;height:.7rem;margin-right:.4rem;border-radius:2px;vertical-align:-.05em}figure.demo .oa-title{margin:1rem 0 .25rem;color:var(--fg);font-size:.9rem;font-weight:600}figure.demo .oa-legend{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin:0 0 .5rem;color:var(--subtext1);font-size:.8rem}figure.demo .oa-line-wrap{position:relative}figure.demo svg.oa-line,figure.demo svg.oa-bars{display:block;width:100%;overflow:visible}figure.demo .oa-grid{stroke:var(--rule);stroke-width:1}figure.demo .oa-cross{stroke:var(--overlay0);stroke-width:1}figure.demo .oa-axis{fill:var(--muted);font-size:11px}figure.demo .oa-label{fill:var(--fg);font-size:12px}figure.demo .oa-series{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}figure.demo .oa-end{stroke:var(--bg);stroke-width:2}figure.demo .oa-in{font-size:11px;font-weight:600}figure.demo .oa-in-dark{fill:#11111b}figure.demo .oa-in-light{fill:#eff1f5}figure.demo .oa-tip{position:absolute;top:0;display:grid;gap:.15rem;padding:.4rem .6rem;border:1px solid var(--rule);border-radius:6px;background:var(--mantle);color:var(--fg);font-size:.8rem;pointer-events:none;white-space:nowrap}figure.demo .oa-table{margin-top:.75rem;font-size:.8rem}figure.demo .oa-table summary{color:var(--muted);cursor:pointer}figure.demo .oa-table table{width:100%;margin-top:.5rem;border-collapse:collapse;font-variant-numeric:tabular-nums}figure.demo .oa-table th,figure.demo .oa-table td{padding:.2rem .4rem;border-bottom:1px solid var(--rule);text-align:left}figure.demo figcaption{margin-top:.5rem;color:var(--muted);font:.9rem/1.5 var(--ui);text-align:center}#search{--pagefind-ui-primary: var(--accent);--pagefind-ui-text: var(--fg);--pagefind-ui-background: var(--bg);--pagefind-ui-border: var(--rule);--pagefind-ui-tag: var(--code-bg);--pagefind-ui-font: var(--body)}math{font-family:"NewCM Math",math;font-size:1.15em}.math-block{margin:1.25rem 0;overflow-x:auto;overflow-y:hidden}figure.demo .ch{font:.8rem/1.6 var(--mono)}figure.demo .ch .ch-hex{display:grid;grid-template-columns:repeat(16, 2.7ch);row-gap:.15em;justify-content:center;padding:.75rem;border-radius:8px;background:var(--code-bg);border:1px solid var(--rule);user-select:none}@media (max-width: 30rem){figure.demo .ch .ch-hex{font-size:.66rem;padding:.5rem}}figure.demo .ch .ch-b{text-align:center;cursor:default;transition:opacity .15s}figure.demo .ch .ch-later{opacity:.18}figure.demo .ch .ch-hl{outline:1px solid var(--fg)}figure.demo .ch .ch-frame{background:var(--surface1);color:var(--fg)}figure.demo .ch .ch-read{color:var(--mauve);font-weight:700}figure.demo .ch .ch-skip{color:var(--fg)}figure.demo .ch .ch-noise{color:var(--overlay0)}figure.demo .ch .ch-sni{color:var(--accent);font-weight:700}figure.demo .ch .ch-name{background:var(--accent);color:var(--base);font-weight:700}figure.demo .ch .ch-plain{color:var(--red)}figure.demo .ch .ch-field{margin:.4rem 0 0;min-height:1.6em;text-align:center;color:var(--fg)}figure.demo .ch .ch-legend{display:flex;flex-wrap:wrap;gap:.25rem 1rem;justify-content:center;margin:.25rem 0 0;color:var(--muted)}figure.demo .ch .ch-swatch{display:inline-block;margin-right:.4ch;padding:0 .2ch;border-radius:2px}figure.demo .ch .ch-host{width:18ch;font:inherit}figure.demo .ch .ch-recv{width:min(100%,32rem)}figure.demo .ch .ch-verdict{color:var(--fg)}figure.demo .ln{font:.8rem/1.6 var(--mono)}figure.demo .ln .ln-c0{--c: var(--peach)}figure.demo .ln .ln-c1{--c: var(--mauve)}figure.demo .ln .ln-c2{--c: var(--teal)}figure.demo .ln .ln-dot{display:inline-block;width:.7em;height:.7em;margin-right:.4ch;border-radius:50%;background:var(--c)}figure.demo .ln .ln-word{display:grid;grid-template-columns:repeat(4, 1fr);gap:.5rem}figure.demo .ln .ln-lane{padding:.5rem;border:1px solid var(--rule);border-radius:8px;background:var(--code-bg);text-align:center}figure.demo .ln .ln-lane.ln-mine{border-color:var(--fg)}figure.demo .ln .ln-lane-name{color:var(--muted)}figure.demo .ln .ln-lane-value{font-size:1.6rem;font-weight:var(--w-bold);line-height:1.3}figure.demo .ln .ln-lane-owners{min-height:1.2em}figure.demo .ln .ln-clients{display:grid;grid-template-columns:repeat(auto-fit, minmax(11rem, 1fr));gap:.5rem;margin-top:.75rem}figure.demo .ln .ln-client{padding:.5rem .75rem;border:1px solid var(--rule);border-left:4px solid var(--c);border-radius:8px;background:var(--mantle);cursor:pointer}figure.demo .ln .ln-client.ln-focus{border-color:var(--fg);border-left-color:var(--c)}figure.demo .ln .ln-client.ln-broken .ln-client-count{color:var(--red);font-weight:var(--w-bold)}figure.demo .ln .ln-client-head{font-weight:var(--w-bold)}figure.demo .ln .ln-client-count{color:var(--muted)}figure.demo .ln .ln-client-buttons{display:flex;gap:.5rem;margin-top:.4rem}figure.demo .ln .ln-client-buttons button{padding:.15rem .6rem;border:1px solid var(--rule);border-radius:6px;background:var(--base);color:var(--fg);font:inherit;cursor:pointer}figure.demo .ln .ln-check{margin-top:.75rem;padding:.5rem .75rem;border:1px solid var(--rule);border-radius:8px;background:var(--code-bg);overflow-x:auto;font-size:.75rem}figure.demo .ln .ln-row{display:grid;grid-template-columns:13ch repeat(4, auto);column-gap:1ch;justify-content:start;white-space:nowrap}figure.demo .ln .ln-row.ln-sum{border-top:1px solid var(--surface1)}figure.demo .ln .ln-row-label{color:var(--muted)}figure.demo .ln .ln-g{color:var(--overlay0)}figure.demo .ln .ln-g-mine{color:var(--fg)}figure.demo .ln .ln-top{color:var(--accent);font-weight:var(--w-bold)}figure.demo .ln .ln-verdict{margin-top:.4rem;color:var(--fg)}figure.demo .ln .ln-cap{width:7rem}figure.demo .ln .ln-note{color:var(--muted)}pre.giallo .rb0{color:var(--red)}pre.giallo .rb1{color:var(--yellow)}pre.giallo .rb2{color:var(--blue)}pre.giallo .rb3{color:var(--peach)}pre.giallo .rb4{color:var(--green)}pre.giallo .rb5{color:var(--mauve)}pre.giallo .rb6{color:var(--teal)}pre.has-ll{margin-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.ll{display:flex;align-items:stretch;margin:-1px 0 1.25rem;border:1px solid var(--rule);border-radius:0 0 8px 8px;background:var(--mantle);color:var(--subtext1);font:.75rem/1.9 var(--mono);white-space:nowrap;overflow:hidden;user-select:none}.ll>*{padding:0 1ch}.ll .ll-a,.ll .ll-z{background:var(--blue);color:var(--base);font-weight:var(--w-bold)}.ll .ll-a{border-radius:0 999px 999px 0;padding-right:1.5ch}.ll .ll-z{border-radius:999px 0 0 999px;padding-left:1.5ch}.ll .ll-b,.ll .ll-y{background:var(--surface0);color:var(--blue)}.ll .ll-b{margin-left:-1.2ch;padding-left:2ch;border:none;border-radius:0 999px 999px 0;font:inherit;cursor:pointer;z-index:0}.ll .ll-a{position:relative;z-index:1}.ll .ll-b:hover,.ll .ll-b:focus-visible{color:var(--fg)}.ll .ll-c{flex:1;overflow:hidden;text-overflow:ellipsis}.ll .ll-y{margin-right:-1.2ch;padding-right:2ch;border-radius:999px 0 0 999px}.ll .ll-z{position:relative;z-index:1;min-width:6ch;text-align:right}.ll.ll-visual .ll-a,.ll.ll-visual .ll-z{background:var(--mauve)}.ll.ll-visual .ll-b,.ll.ll-visual .ll-y{color:var(--mauve)}@media (max-width: 30rem){.ll .ll-x,.ll .ll-y{display:none}}pre.giallo{--gutter: calc(var(--digits, 2) * 1ch + 2ch)}pre.giallo code{display:flex;flex-direction:column;min-width:max-content;counter-reset:line}pre.giallo .giallo-l{position:relative;min-height:1.5em;padding-left:calc(var(--gutter) + var(--indent, 0)*1ch);text-indent:calc(var(--indent, 0)*-1ch);counter-increment:line}pre.giallo .ind{white-space:pre}pre.giallo .giallo-l::before{content:counter(line);position:absolute;left:0;width:calc(var(--gutter) - 2ch);text-align:right;text-indent:0;color:var(--overlay0)}pre.giallo .giallo-l.cursor{background:color-mix(in srgb, var(--surface0) 55%, rgba(0,0,0,0))}pre.giallo .giallo-l.cursor::before{color:var(--green);font-weight:var(--w-bold)}@media (max-width: 40rem){pre.giallo code{min-width:0}pre.giallo .giallo-l{white-space:pre-wrap;overflow-wrap:anywhere}}figure.grids{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;margin:1.5rem 0}figure.grids figcaption{flex-basis:100%;color:var(--muted);font-size:.85rem;text-align:center}svg.cgrid{width:100%;max-width:16rem;height:auto}svg.cgrid .c{fill:var(--mantle);stroke:var(--surface0)}svg.cgrid .rd{fill:color-mix(in srgb, var(--accent) 12%, var(--mantle));stroke:var(--surface0)}svg.cgrid .q{fill:color-mix(in srgb, var(--accent) 35%, var(--mantle));stroke:var(--surface0)}svg.cgrid .pg{fill:none;stroke:var(--overlay0);stroke-width:2}svg.cgrid .ql{fill:none;stroke:var(--accent);stroke-width:2.5}svg.cgrid .cv{fill:none;stroke:var(--peach);stroke-width:2;stroke-linejoin:round;opacity:.85}svg.cgrid.faint .cv{stroke-width:1.25;opacity:.45}svg.cgrid text{fill:var(--fg);font:calc(var(--cell)*.36px) var(--mono);text-anchor:middle;dominant-baseline:central}article table{border-collapse:collapse;margin:1.25rem 0;font:.9rem/1.6 var(--mono);font-variant-numeric:tabular-nums}article table th,article table td{padding:.2rem 1.25ch}article table th{font-weight:var(--w-bold);border-bottom:1px solid var(--overlay0);text-align:left}article table tr+tr td{border-top:1px solid var(--surface0)}