@font-face{font-family:Safis Serif;src:url(/fonts/serif-text.a9942989.woff2)format("woff2");font-weight:400 700;font-style:normal;font-display:block}@font-face{font-family:Safis Serif;src:url(/fonts/serif-text-italic.3a3de062.woff2)format("woff2");font-weight:400 600;font-style:italic;font-display:block}@font-face{font-family:Safis Display;src:url(/fonts/serif-display.8baf11d8.woff2)format("woff2");font-weight:560;font-style:normal;font-display:block}@font-face{font-family:Safis Sans;src:url(/fonts/sans.1b203492.woff2)format("woff2");font-weight:400 650;font-style:normal;font-display:block}:root{--bg:#fcfcfc;--panel:var(--bg);--ink:#111;--muted:#666;--faint:#d4d4d4;--grid:#efefef;--rule:#e6e6e6;--brass:#966111;--red:#d22d2d;--orange:#bd4f08;--green:#18793e;--blue:#2457d6;--purple:#7438e0;--accent:var(--ink);--track:color-mix(in srgb, var(--ink) 13%, transparent);--thumb:#fff;--shadow:0 1px 2px #0000000f, 0 8px 24px -12px #00000024;--chip:color-mix(in srgb, var(--ink) 5.5%, transparent);--chip-hover:color-mix(in srgb, var(--ink) 10%, transparent);--chip-line:color-mix(in srgb, var(--ink) 9%, transparent);--ease-out:cubic-bezier(.2, .7, .2, 1);--font-serif:"Safis Serif", "Iowan Old Style", Charter, "Palatino Linotype", Georgia, serif;--font-display:"Safis Display", "Safis Serif", "Iowan Old Style", Georgia, serif;--font-text:"Safis Sans", "Source Sans 3", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;--measure:38rem;--wide:56rem;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0a0a0a;--panel:var(--bg);--ink:#ededed;--muted:#9a9a9a;--faint:#3a3a3a;--grid:#1a1a1a;--rule:#222;--brass:#d9a548;--red:#f47272;--orange:#f59447;--green:#4fd185;--blue:#6aa5ff;--purple:#ac8cff;--track:color-mix(in srgb, var(--ink) 16%, transparent);--thumb:#fff;--shadow:0 1px 2px #00000080, 0 12px 32px -12px #000000d9;color-scheme:dark}}:root[data-theme=dark]{--bg:#0a0a0a;--panel:var(--bg);--ink:#ededed;--muted:#9a9a9a;--faint:#3a3a3a;--grid:#1a1a1a;--rule:#222;--brass:#d9a548;--red:#f47272;--orange:#f59447;--green:#4fd185;--blue:#6aa5ff;--purple:#ac8cff;--track:color-mix(in srgb, var(--ink) 16%, transparent);--thumb:#fff;--shadow:0 1px 2px #00000080, 0 12px 32px -12px #000000d9;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--font-serif);font-variant-numeric:oldstyle-nums proportional-nums;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:19px;line-height:1.6}::selection{background:color-mix(in srgb, var(--ink) 18%, transparent)}.page{padding:0 20px;position:relative}main{max-width:var(--measure);margin:0 auto;padding:88px 0 128px}.toc{display:none}@media (width>=1240px){.page.has-toc{grid-template-columns:264px 1fr;display:grid}.page.has-toc main{margin:0 auto;transform:translate(-70px)}.toc{top:var(--safis-bar,0px);max-height:calc(100vh - var(--safis-bar,0px));font:14.5px/1.4 var(--font-text);align-self:start;padding:56px 16px 48px 4px;display:block;position:sticky;overflow-y:auto}}.toc{scrollbar-width:thin;scrollbar-color:transparent transparent;scrollbar-gutter:stable;overscroll-behavior:contain}.toc:hover,.toc:focus-within{scrollbar-color:var(--faint) transparent}.toc-toggle{top:14px;z-index:16;border:1px solid var(--rule);background:color-mix(in srgb, var(--panel) 92%, transparent);width:36px;height:36px;color:var(--muted);cursor:pointer;box-shadow:var(--shadow);border-radius:50%;place-items:center;padding:0;transition:scale .15s,color .15s,background-color .15s;display:grid;position:fixed;inset-inline-start:14px}.toc-toggle svg{width:16px;height:16px}.toc-toggle:active{scale:.96}.toc-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (hover:hover){.toc-toggle:hover{color:var(--ink)}}@media (width>=1240px){.page.has-toc{transition:grid-template-columns .4s var(--ease-out)}.page.has-toc main{transition:transform .4s var(--ease-out)}.page.has-toc .toc{transition:opacity .22s var(--ease-out), translate .4s var(--ease-out), visibility .4s}.safis-toc-hidden .page.has-toc{grid-template-columns:0 1fr}.safis-toc-hidden .page.has-toc main{transform:none}.safis-toc-hidden .page.has-toc .toc{opacity:0;visibility:hidden;overflow:hidden;translate:-28px}}@media (width<=1239.98px){.safis-toc-open .page.has-toc .toc{z-index:30;width:min(320px,86vw);font:15px/1.45 var(--font-text);background:var(--bg);box-shadow:0 0 0 1px var(--rule), 0 24px 60px -12px #00000073;animation:toc-in .32s var(--ease-out);padding:64px 16px 40px 18px;display:block;position:fixed;inset:0 auto 0 0;overflow-y:auto}.safis-toc-open .page.has-toc:after{content:"";z-index:29;backdrop-filter:blur(2px);background:#00000052;animation:.3s toc-fade;position:fixed;inset:0}}@keyframes toc-in{0%{translate:-100%}}@keyframes toc-fade{0%{opacity:0}}@media (prefers-reduced-motion:reduce){.safis-toc-open .page.has-toc .toc,.safis-toc-open .page.has-toc:after{animation:none}.page.has-toc,.page.has-toc main,.page.has-toc .toc{transition:none!important}}@media print{.toc-toggle{display:none!important}}.toc a{color:var(--muted);text-wrap:pretty;border-radius:7px;margin:1px 0;padding:5px 10px;text-decoration:none;transition:background-color .15s,color .15s;display:block}.toc a:hover{color:var(--ink);background:var(--chip)}.toc a:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.toc a[aria-current=page]{color:var(--ink);background:var(--chip);font-weight:600;position:relative}.toc a[aria-current=page]:before{content:"";background:var(--orange);border-radius:2px;width:2px;position:absolute;inset-block:7px;inset-inline-start:-4px}.toc .site{color:var(--ink);font:560 21px/1.2 var(--font-display);letter-spacing:-.005em;background:0 0;margin-bottom:26px;padding:0 10px;display:block}.toc .site:hover{background:0 0}.toc h2{font:600 11.5px/1.2 var(--font-text);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);opacity:.85;margin:22px 0 6px;padding:0 10px}.toc ul{margin:0;padding:0;list-style:none}.backlink{font:15px/1.4 var(--font-serif);color:var(--muted);margin-bottom:36px;font-style:italic;text-decoration:none;display:inline-block}.backlink:hover{color:var(--ink)}@media (width>=1240px){.has-toc .backlink{display:none}}.skip{inset-inline-start:16px;z-index:20;background:var(--ink);color:var(--bg);font:500 15px/1.2 var(--font-text);border-radius:6px;padding:8px 14px;text-decoration:none;position:absolute;top:-48px}.skip:focus{top:12px}.theme-toggle{top:14px;z-index:15;border:1px solid var(--rule);background:color-mix(in srgb, var(--panel) 92%, transparent);width:36px;height:36px;color:var(--muted);cursor:pointer;box-shadow:var(--shadow);border-radius:50%;place-items:center;padding:0;transition-property:scale,color;transition-duration:.15s;display:grid;position:fixed;inset-inline-end:14px}.theme-toggle svg{fill:currentColor;width:16px;height:16px}.theme-toggle:active{scale:.96}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (hover:hover){.theme-toggle:hover{color:var(--ink)}}header{margin-bottom:56px}.kicker{font:600 15px/1.2 var(--font-serif);letter-spacing:.07em;color:var(--accent);margin:0 0 22px;font-variant-caps:all-small-caps}.kicker .meta{color:var(--muted);font-weight:400}.kicker .meta:before{content:"·";color:var(--faint);margin:0 .6em}h1{font:560 clamp(2.4rem, 6.4vw, 3.5rem)/1.04 var(--font-display);letter-spacing:-.012em;text-wrap:balance;font-variant-numeric:lining-nums;margin:0 0 22px}.dek{font:italic 400 1.32rem/1.45 var(--font-serif);color:var(--muted);text-wrap:pretty;max-width:34rem;margin:0}header:after{content:"";background:var(--ink);opacity:.5;width:72px;height:1px;margin-top:40px;display:block}article h2{font:600 1.62rem/1.2 var(--font-serif);letter-spacing:-.008em;text-wrap:balance;font-variant-numeric:lining-nums;margin:84px 0 18px;position:relative}article h2:not(.plain):before{counter-increment:section;content:counter(section);font:400 1.05rem/1 var(--font-serif);font-variant-numeric:oldstyle-nums;color:var(--muted);margin-bottom:6px;display:block}@media (width>=900px){article h2:not(.plain):before{margin:0;font-size:1.3rem;position:absolute;top:.36em;right:calc(100% + 22px)}}article h3{font:italic 600 1.15rem/1.3 var(--font-serif);margin:40px 0 8px}p,li{hanging-punctuation:first}.dek,figcaption,.note{text-wrap:pretty}p{margin:0 0 1.05em}ul,ol{margin:0 0 1.05em;padding-inline-start:1.25em}li{margin-bottom:.3em}li::marker{color:var(--muted)}a{color:inherit;text-decoration-skip-ink:auto;text-decoration-line:underline;text-decoration-color:color-mix(in srgb, var(--accent) 55%, transparent);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{text-decoration-color:var(--accent)}strong{font-weight:650}em{font-style:italic}var,.math{font-family:var(--font-serif);font-variant-numeric:lining-nums;font-style:italic}.eq{font-family:var(--font-serif);text-align:center;font-variant-numeric:lining-nums;margin:1.6em 0;font-size:1.15em;overflow-x:auto}.aside{color:var(--accent);font-style:italic}.note{color:var(--muted);border-inline-start:1px solid var(--accent);margin:1.6em 0;padding-block:2px;padding-inline:18px 0;font-size:.9em;line-height:1.55}.note>:last-child{margin-bottom:0}blockquote{border-inline-start:2px solid var(--rule);color:var(--muted);margin:1.6em 0;padding-inline-start:1.2em;font-style:italic}code,kbd,samp{font-family:var(--font-mono);font-size:.84em}code{background:var(--grid);border-radius:4px;padding:.1em .32em}kbd{font:500 11.5px/1 var(--font-mono);border:1px solid var(--faint);background:var(--panel);color:var(--ink);border-bottom-width:2px;border-radius:4px;padding:3px 5px}hr{text-align:center;border:0;margin:3em 0}hr:after{content:"⁂";color:var(--muted)}.lede:first-letter{float:left;font:560 3.3em/.82 var(--font-display);color:var(--ink);margin:.07em .08em 0 0}.c-red{--c:var(--red)}.c-orange{--c:var(--orange)}.c-green{--c:var(--green)}.c-blue{--c:var(--blue)}.c-purple{--c:var(--purple)}.c-brass{--c:var(--brass)}.c-muted{--c:var(--muted)}:is(.c-red,.c-orange,.c-green,.c-blue,.c-purple,.c-brass,.c-muted){color:var(--c);font-weight:600}[data-part]{cursor:default;text-decoration:underline dotted color-mix(in srgb, var(--c,var(--ink)) 60%, transparent);text-underline-offset:.22em;border-radius:3px;text-decoration-thickness:1.5px;transition:background-color .15s}[data-part].lit,[data-part]:hover{background:color-mix(in srgb, var(--c,var(--accent)) 14%, transparent);text-decoration-style:solid}.chip{min-width:1.5em;font:600 .8em/1.55 var(--font-text);text-align:center;vertical-align:.1em;font-variant-numeric:lining-nums;color:#1c1b18;background:color-mix(in srgb, var(--c,var(--faint)) 30%, white);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--c,var(--faint)) 70%, transparent);border-radius:.36em;padding:0 .42em;display:inline-block}.chip.red{--c:var(--red)}.chip.orange{--c:var(--orange)}.chip.green{--c:var(--green)}.chip.blue{--c:var(--blue)}.chip.purple{--c:var(--purple)}.chip.brass{--c:var(--brass)}.scrub{--c:var(--ink);color:var(--c);font-variant-numeric:lining-nums tabular-nums;cursor:ew-resize;white-space:nowrap;touch-action:none;-webkit-user-select:none;user-select:none;border-bottom:1.5px dashed color-mix(in srgb, var(--c) 70%, transparent);border-radius:2px;outline:none;padding:0 1px;font-weight:600}.scrub:hover,.scrub.active,.scrub:focus-visible{background:color-mix(in srgb, var(--c) 12%, transparent);border-bottom-style:solid}.scrub.active{cursor:grabbing}.set{--c:var(--ink);font:inherit;color:var(--c);cursor:pointer;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--c) 45%, transparent);text-underline-offset:.18em;background:0 0;border:0;border-radius:3px;margin:0;padding:0 2px;font-weight:600;text-decoration-thickness:1.5px}@media (hover:hover){.set:hover{background:color-mix(in srgb, var(--c) 12%, transparent)}}.set:focus-visible,.scrub:focus-visible{outline:2px solid var(--c);outline-offset:2px}figure.demo{counter-increment:figure;margin:2.4em 0 2.6em}figure.demo.wide{width:min(calc(100vw - 40px), var(--wide));margin-left:50%;transform:translate(-50%)}.plate{position:relative}.stage{border-radius:4px;outline:none;position:relative}.stage:focus-visible{outline:2px solid var(--ink);outline-offset:6px}.stage canvas{touch-action:pan-y;-webkit-user-select:none;user-select:none;width:100%;display:block}.stage canvas.draggable{touch-action:none}.stage canvas.grabbing{cursor:grabbing!important}.stage .zoom{top:8px;z-index:2;opacity:0;transition:opacity .2s var(--ease-out);flex-direction:column;gap:4px;display:flex;position:absolute;inset-inline-end:8px}.stage:hover .zoom,.stage:focus-within .zoom{opacity:1}@media (hover:none){.stage .zoom{opacity:.92}}.zoom button{border:1px solid var(--rule);cursor:pointer;background:color-mix(in srgb, var(--panel) 84%, transparent);backdrop-filter:blur(8px);width:30px;height:30px;color:var(--muted);box-shadow:var(--shadow);border-radius:9px;place-items:center;padding:0;transition:color .15s,scale .15s;display:grid}.zoom button svg{width:14px;height:14px}.zoom button:active{scale:.94}.zoom button:disabled{opacity:.35;cursor:default}.zoom button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (hover:hover){.zoom button:not(:disabled):hover{color:var(--ink)}}.safis-checking .stage .zoom{display:none}@media print{.stage .zoom{display:none}}figure.demo figcaption,figure.demo>.caption{font:15.5px/1.5 var(--font-serif);color:var(--muted);text-wrap:pretty;margin:12px 2px 0}figure.demo figcaption:before{content:"Figure " counter(figure);letter-spacing:.05em;color:var(--ink);margin-right:.6em;font-variant-caps:all-small-caps;font-weight:600}figcaption em{color:var(--ink)}.demo-error{color:var(--red);font:13px/1.4 var(--font-mono);margin:8px 0 0;padding:0 14px 12px}.panel{font-family:var(--font-text);font-variant-numeric:lining-nums tabular-nums;gap:10px;padding:14px 0 0;font-size:14.5px;line-height:1.3;display:grid}.panel:empty{display:none}.controls{gap:4px;display:grid}.ctl{--c:var(--ink);grid-template-columns:minmax(5.5rem,8rem) 1fr minmax(4.6rem,auto);align-items:center;gap:14px;min-height:36px;display:grid}.ctl .name{color:var(--muted);letter-spacing:.005em;font-weight:500}.ctl .name:first-letter{text-transform:uppercase}.ctl .val{text-align:right;white-space:nowrap;min-width:4.6rem;color:var(--ink);background:var(--chip);box-shadow:inset 0 0 0 1px var(--chip-line);transition:background-color .18s var(--ease-out);cursor:ew-resize;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:8px;outline:none;justify-self:end;padding:5px 10px;font-weight:600}.ctl .val:focus-visible{outline:2px solid var(--ink);outline-offset:1px}@media (hover:hover){.ctl .val:hover{background:color-mix(in srgb, var(--ink) 12%, transparent)}}.ctl .val[contenteditable=true]{cursor:text;background:var(--bg);box-shadow:inset 0 0 0 1px var(--faint);-webkit-user-select:text;user-select:text}.ctl.wide-widget{grid-template-columns:minmax(5.5rem,8rem) 1fr}.slider{height:36px;position:relative}.slider input[type=range]{position:absolute;inset:0}.slider .marks{pointer-events:none;height:10px;position:absolute;top:24px;left:9px;right:9px}.slider .mark{color:var(--muted);white-space:nowrap;font-size:11.5px;position:absolute;top:0;transform:translate(-50%)}.slider .mark:before{content:"";background:var(--muted);border-radius:50%;width:4px;height:4px;margin-left:-2px;position:absolute;top:-8px;left:50%}.slider.has-labels{height:44px}.slider.has-labels input[type=range]{bottom:8px}input[type=range]{--p:50%;-webkit-appearance:none;appearance:none;cursor:pointer;background:0 0;width:100%;height:36px;margin:0}input[type=range]::-webkit-slider-runnable-track{background:linear-gradient(to right, var(--c) var(--p), var(--track) var(--p));border-radius:999px;height:4px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--thumb);width:18px;height:18px;box-shadow:0 0 0 1px #0000001f, 0 1px 3px #00000059, 0 0 0 0 color-mix(in srgb, var(--c) 24%, transparent);border:0;border-radius:50%;margin-top:-7px;transition-property:box-shadow,scale;transition-duration:.15s}input[type=range]::-moz-range-track{background:var(--track);border-radius:999px;height:4px}input[type=range]::-moz-range-progress{background:var(--c);border-radius:999px;height:4px}input[type=range]::-moz-range-thumb{background:var(--thumb);border:0;border-radius:50%;width:18px;height:18px;box-shadow:0 0 0 1px #0000001f,0 1px 3px #00000059}@media (hover:hover){input[type=range]:hover::-webkit-slider-thumb{box-shadow:0 0 0 1px #0000001f, 0 1px 3px #00000059, 0 0 0 7px color-mix(in srgb, var(--c) 22%, transparent)}input[type=range]:hover::-moz-range-thumb{box-shadow:0 0 0 1px #0000001f, 0 1px 3px #00000059, 0 0 0 7px color-mix(in srgb, var(--c) 22%, transparent)}}input[type=range]:active::-webkit-slider-thumb{box-shadow:0 0 0 1px #0000001f, 0 1px 3px #00000059, 0 0 0 9px color-mix(in srgb, var(--c) 26%, transparent);scale:1.1}input[type=range]:active::-moz-range-thumb{scale:1.1}input[type=range]:focus-visible{outline:none}input[type=range]:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--ink)}input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--ink)}.switch{cursor:pointer;color:var(--ink);align-items:center;gap:10px;min-height:36px;display:inline-flex;position:relative}.switch input{opacity:0;width:1px;height:1px;position:absolute}.switch .track{background:var(--grid);width:32px;height:18px;box-shadow:inset 0 0 0 1.5px var(--muted);border-radius:9px;flex:none;transition:background-color .15s,box-shadow .15s;position:relative}.switch .track:after{content:"";background:var(--muted);border-radius:50%;width:12px;height:12px;transition:transform .18s cubic-bezier(.2,0,0,1),background-color .15s;position:absolute;top:3px;left:3px}.switch input:checked+.track{background:var(--c);box-shadow:none}.switch input:checked+.track:after{background:var(--panel);transform:translate(14px)}.switch input:focus-visible+.track{outline:2px solid var(--focus,var(--c));outline-offset:2px}.switch .label{font-weight:500}.toggles{flex-wrap:wrap;gap:0 22px;display:flex}.segmented{background:var(--chip);box-shadow:inset 0 0 0 1px var(--chip-line);border-radius:10px;flex-wrap:wrap;justify-self:start;gap:2px;padding:3px;display:inline-flex}.segmented button{font:500 14px/1 var(--font-text);color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:7px;min-height:32px;padding:8px 13px}@media (hover:hover){.segmented button:hover{color:var(--ink)}}.segmented button[aria-pressed=true]{background:var(--panel);color:var(--ink);box-shadow:0 0 0 1px var(--chip-line), 0 1px 2px #0000001f, 0 2px 8px -2px #0000001a}.segmented button[aria-pressed=true]:before{content:"";background:var(--c);vertical-align:.08em;border-radius:50%;width:6px;height:6px;margin-right:7px;display:inline-block}.segmented button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.stepper{background:var(--chip);box-shadow:inset 0 0 0 1px var(--chip-line);border-radius:10px;justify-self:start;align-items:center;display:inline-flex;overflow:hidden}.stepper button{width:36px;height:34px;color:var(--ink);font:500 17px/1 var(--font-text);cursor:pointer;background:0 0;border:0}@media (hover:hover){.stepper button:hover{background:var(--chip-hover)}}.stepper button:disabled{color:var(--faint);cursor:default;background:0 0}.stepper .val{text-align:center;background:0 0;border-radius:0;min-width:4rem;padding:0 8px;line-height:34px}.knob{cursor:grab;touch-action:none;background:radial-gradient(circle at 50% 35%, var(--panel), var(--grid));width:40px;height:40px;box-shadow:inset 0 0 0 1px var(--faint), 0 1px 2px #0000001f;border-radius:50%;outline:none;justify-self:start;position:relative}.knob:after{content:"";background:var(--c);transform-origin:50% 16px;width:3px;height:12px;transform:rotate(var(--a,0deg));border-radius:2px;margin-left:-1.5px;position:absolute;top:4px;left:50%}.knob:focus-visible{outline:2px solid var(--focus,var(--c));outline-offset:2px}.pad{cursor:crosshair;touch-action:none;background-color:var(--bg);width:120px;height:120px;box-shadow:inset 0 0 0 1px var(--faint);background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-position:50%;background-size:20px 20px;border-radius:6px;outline:none;justify-self:start;position:relative}.pad .dot{background:var(--c);border:2px solid var(--panel);width:14px;height:14px;box-shadow:0 0 0 1px var(--c);left:var(--x,50%);top:var(--y,50%);border-radius:50%;margin:-7px 0 0 -7px;position:absolute}.pad:focus-visible{outline:2px solid var(--focus,var(--c));outline-offset:2px}.buttons{flex-wrap:wrap;gap:8px;display:flex}.btn{font:500 14px/1 var(--font-text);letter-spacing:.005em;background:var(--chip);min-height:34px;color:var(--ink);cursor:pointer;box-shadow:inset 0 0 0 1px var(--chip-line);border:0;border-radius:9px;padding:9px 15px;position:relative}@media (hover:hover){.btn:hover{background:var(--chip-hover)}}.btn.primary,.btn[aria-pressed=true]{background:var(--ink);color:var(--bg);box-shadow:0 1px 2px #0000002e}@media (hover:hover){.btn.primary:hover{background:color-mix(in srgb, var(--ink) 86%, var(--bg))}}.btn,.preset,.icon-btn,.speed,.segmented button,.stepper button{transition:scale .12s var(--ease-out), background-color .18s var(--ease-out), color .18s var(--ease-out), box-shadow .18s var(--ease-out);-webkit-tap-highlight-color:transparent}:is(.btn,.preset,.icon-btn,.segmented button,.stepper button):active{scale:.96}.foot{flex-wrap:wrap;align-items:center;gap:10px 16px;min-height:34px;display:flex}.foot:empty{display:none}.transport{align-items:center;gap:4px;display:inline-flex}.icon-btn{background:var(--chip);width:34px;height:34px;color:var(--ink);box-shadow:inset 0 0 0 1px var(--chip-line);cursor:pointer;border:0;border-radius:50%;place-items:center;padding:0;display:grid;position:relative}@media (hover:hover){.icon-btn:hover{background:var(--chip-hover)}}.icon-btn[data-state=playing]{background:var(--ink);color:var(--bg);box-shadow:none}.icon-btn svg{fill:currentColor;width:13px;height:13px}.icon-btn[data-state=playing] .i-play,.icon-btn[data-state=paused] .i-pause{display:none}.speed{font:600 12.5px/1 var(--font-text);color:var(--muted);cursor:pointer;font-variant-numeric:tabular-nums;background:0 0;border:0;border-radius:7px;min-width:2.6rem;padding:7px}@media (hover:hover){.speed:hover{color:var(--ink);background:var(--chip)}}.presets{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.presets .try{color:var(--muted);font:italic 400 15px/1 var(--font-serif);margin-right:4px}.preset{font:500 13.5px/1 var(--font-text);letter-spacing:.005em;color:var(--ink);background:var(--chip);cursor:pointer;min-height:30px;box-shadow:inset 0 0 0 1px var(--chip-line);border:0;border-radius:999px;padding:8px 13px;position:relative}:is(.preset,.icon-btn,.btn):after{content:"";position:absolute;inset:-4px}@media (hover:hover){.preset:hover{background:var(--chip-hover)}}.preset[aria-pressed=true]{background:var(--ink);color:var(--bg);box-shadow:0 1px 2px #00000029}:is(.icon-btn,.btn,.preset,.speed):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.status{color:var(--ink);white-space:pre-wrap;text-align:right;margin-left:auto;font-weight:600}.side{color:var(--muted);flex-wrap:wrap;gap:4px 14px;font-size:12.5px;display:flex}.side:empty{display:none}.side .hint{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.side{opacity:0;pointer-events:none;background:color-mix(in srgb, var(--panel) 90%, transparent);box-shadow:0 0 0 1px var(--rule);border-radius:6px;padding:5px 9px;transition:opacity .2s;position:absolute;top:10px;right:10px}.stage:focus-visible~.side{opacity:1}@media (hover:none){.side{display:none}}.refs{padding-inline-start:0;font-size:.92em;list-style:none}.refs li{border-inline-start:1px solid var(--rule);margin-bottom:12px;padding-inline-start:18px}footer.colophon{border-top:1px solid var(--rule);color:var(--muted);margin-top:96px;padding-top:22px;font-size:.82em;font-style:italic}.check-report{z-index:10;background:var(--bg);max-height:60vh;color:var(--ink);border-bottom:2px solid var(--faint);font:12.5px/1.5 var(--font-mono);white-space:pre-wrap;margin:0;padding:12px 16px;position:fixed;inset:0 0 auto;overflow:auto}@media (width<=560px){body{font-size:17.5px;line-height:1.58}main{padding-top:48px}header{margin-bottom:40px}.page{padding:0 16px}.panel{padding:8px 0 10px}.controls{gap:10px}.ctl{grid-template-columns:1fr auto;grid-template-areas:"name val""widget widget";gap:2px 10px;min-height:0}.ctl>.name{grid-area:name}.ctl>.val{grid-area:val;min-width:3.6rem;padding:3px 8px}.ctl>:nth-child(2){grid-area:widget}.ctl .val[contenteditable=true]{font-size:16px}.ctl.wide-widget{grid-template-columns:1fr;grid-template-areas:"name""widget";gap:6px}.status{text-align:left;flex-basis:100%;margin-left:0}figure.demo figcaption{font-size:14.5px}}.safis-reveal figure.demo.in .plate,.safis-checking figure.demo .plate{opacity:1;translate:none}.safis-checking figure.demo .plate{transition:none}body{transition:background-color .3s,color .3s}@media print{figure.demo .plate{opacity:1!important;translate:none!important}.theme-toggle,.panel,.side{display:none!important}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important}.safis-reveal figure.demo .plate{opacity:1;translate:none}}@font-face{font-family:Safis Math;src:url(/fonts/math.7ad29308.woff2)format("woff2");font-display:block}:root{--font-math:"Safis Math", "STIX Two Math", "Cambria Math", "Latin Modern Math", math;counter-reset:tex-eq}math{font-family:var(--font-math);font-size:1.07em}span.tex{white-space:nowrap}:is(div,p).tex{text-align:center;align-items:center;gap:1em;margin:28px 0;display:flex}.tex-scroll{flex:auto;min-width:0;padding:4px 0;overflow:auto hidden}.tex-scroll>math{font-size:1.14em}:is(div,p).tex:is([data-number],.numbered):before{content:"";flex:none;width:2.2em}:is(div,p).tex.numbered{counter-increment:tex-eq}:is(div,p).tex:is([data-number],.numbered):after{text-align:right;width:2.2em;font-family:var(--font-serif);font-variant-numeric:lining-nums;color:var(--muted);flex:none}@media (width<=560px){.tex-scroll>math{font-size:1.04em}:is(div,p).tex:is([data-number],.numbered):before{display:none}}:is(div,p).tex[data-number]:after{content:"(" attr(data-number) ")"}:is(div,p).tex.numbered:not([data-number]):after{content:"(" counter(tex-eq) ")"}mtable.tex-matrix>mtr>mtd{padding:.12em .42em}mtable.tex-matrix>mtr>mtd:first-child{padding-left:.12em}mtable.tex-matrix>mtr>mtd:last-child{padding-right:.12em}mtable.tex-small{font-size:.75em}mtable.tex-cases>mtr>mtd{text-align:left;padding:.15em 0}mtable.tex-cases>mtr>mtd+mtd{padding-left:1em}mtable.tex-aligned>mtr>mtd{padding:.2em 0}mtable.tex-aligned>mtr>mtd:nth-child(odd){text-align:right}mtable.tex-aligned>mtr>mtd:nth-child(2n){text-align:left;padding-right:1.6em}mtable.tex-aligned>mtr>mtd:last-child{padding-right:0}mtable.tex-gathered>mtr>mtd{padding:.2em 0}mtd.tex-left{text-align:left}mtd.tex-right{text-align:right}mtd.tex-center{text-align:center}mrow.tex-boxed{border:1px solid;padding:.2em .3em}mrow:is(.tex-xarrow,.tex-overarrow){--t:.06em;--hw:.3em;--hh:.15em;--line:linear-gradient(currentColor, currentColor);--tl:linear-gradient(to top right, transparent calc(50% - .03em), currentColor calc(50% - .03em), currentColor calc(50% + .03em), transparent calc(50% + .03em));--bl:linear-gradient(to bottom right, transparent calc(50% - .03em), currentColor calc(50% - .03em), currentColor calc(50% + .03em), transparent calc(50% + .03em));background-repeat:no-repeat}mrow.tex-xarrow{--yl:50%;--yu:calc(50% - .075em);--yd:calc(50% + .075em);margin:0 .2778em}mrow.tex-xarrow>mtable>mtr>mtd{padding:.06em .6em}mrow:is(.tex-arrow-eq,.tex-arrow-r2,.tex-arrow-l2)>mtable>mtr>mtd{padding-block:.16em}mrow.tex-xarrow-label{math-depth:add(1);font-size:math}mrow.tex-overarrow{--yl:.13em;--yu:.01em;--yd:.16em;padding-top:.4em}mrow.tex-arrow-r,mrow.tex-arrow-map{background-image:var(--line), var(--tl), var(--bl);background-size:calc(100% - .08em) var(--t), var(--hw) var(--hh), var(--hw) var(--hh);background-position:left .02em top var(--yl), right .02em top var(--yu), right .02em top var(--yd)}mrow.tex-arrow-map{background-image:var(--line), var(--tl), var(--bl), var(--line);background-size:calc(100% - .08em) var(--t), var(--hw) var(--hh), var(--hw) var(--hh), var(--t) .3em;background-position:left .02em top var(--yl), right .02em top var(--yu), right .02em top var(--yd), left .02em top 50%}mrow.tex-arrow-l{background-image:var(--line), var(--bl), var(--tl);background-size:calc(100% - .08em) var(--t), var(--hw) var(--hh), var(--hw) var(--hh);background-position:right .02em top var(--yl), left .02em top var(--yu), left .02em top var(--yd)}mrow.tex-arrow-lr{background-image:var(--line), var(--tl), var(--bl), var(--bl), var(--tl);background-size:calc(100% - .08em) var(--t), var(--hw) var(--hh), var(--hw) var(--hh), var(--hw) var(--hh), var(--hw) var(--hh);background-position:left .04em top var(--yl), right .02em top var(--yu), right .02em top var(--yd), left .02em top var(--yu), left .02em top var(--yd)}mrow.tex-arrow-eq{background-image:var(--line), var(--tl), var(--line), var(--tl);background-size:calc(100% - .04em) var(--t), var(--hw) var(--hh), calc(100% - .04em) var(--t), var(--hw) var(--hh);background-position:.02em calc(50% - .1em),right .02em top calc(50% - .175em),.02em calc(50% + .1em),.02em calc(50% + .175em)}mrow:is(.tex-arrow-r2,.tex-arrow-l2){--hw:.34em;--hh:.24em}mrow.tex-arrow-r2{background-image:var(--line), var(--line), var(--tl), var(--bl);background-size:calc(100% - .2em) var(--t), calc(100% - .2em) var(--t), var(--hw) var(--hh), var(--hw) var(--hh);background-position:.02em calc(50% - .075em),.02em calc(50% + .075em),right .02em top calc(50% - .12em),right .02em top calc(50% + .12em)}mrow.tex-arrow-l2{background-image:var(--line), var(--line), var(--bl), var(--tl);background-size:calc(100% - .2em) var(--t), calc(100% - .2em) var(--t), var(--hw) var(--hh), var(--hw) var(--hh);background-position:right .02em top calc(50% - .075em),right .02em top calc(50% + .075em),.02em calc(50% - .12em),.02em calc(50% + .12em)}mrow:is(.tex-cancel,.tex-bcancel,.tex-xcancel){--line:currentColor}mrow.tex-cancel{background:linear-gradient(to top right, transparent calc(50% - .6px), var(--line) calc(50% - .6px), var(--line) calc(50% + .6px), transparent calc(50% + .6px))}mrow.tex-bcancel{background:linear-gradient(to bottom right, transparent calc(50% - .6px), var(--line) calc(50% - .6px), var(--line) calc(50% + .6px), transparent calc(50% + .6px))}mrow.tex-xcancel{background:linear-gradient(to top right, transparent calc(50% - .6px), var(--line) calc(50% - .6px), var(--line) calc(50% + .6px), transparent calc(50% + .6px)), linear-gradient(to bottom right, transparent calc(50% - .6px), var(--line) calc(50% - .6px), var(--line) calc(50% + .6px), transparent calc(50% + .6px))}.tex-error{font:.86em/1.4 var(--font-mono);color:var(--red);background:color-mix(in srgb, var(--red) 9%, transparent);white-space:pre-wrap;border-radius:4px;padding:1px 5px}article :is(h2,h3){scroll-margin-top:24px}.anchor{color:var(--faint);opacity:0;margin-inline-start:.35em;font-weight:400;text-decoration:none;transition:opacity .15s}article :is(h2,h3):hover .anchor,.anchor:focus-visible{opacity:1}.anchor:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.abstract{background:color-mix(in srgb, var(--ink) 4%, transparent);border-radius:8px;margin:0 0 2.4em;padding:18px 22px;font-size:.92em;line-height:1.55}.abstract:before{content:attr(data-label);font:600 14px/1.2 var(--font-serif);letter-spacing:.07em;color:var(--accent);margin-bottom:6px;font-variant-caps:all-small-caps;display:block}.abstract:not([data-label]):before{content:"In brief"}.abstract>:last-child{margin-bottom:0}.abstract ul{margin:0}.contents{margin:0 0 2.6em;font-size:.92em}.contents summary{cursor:pointer;font:600 14px/1.2 var(--font-serif);letter-spacing:.07em;color:var(--accent);align-items:center;gap:6px;min-height:28px;font-variant-caps:all-small-caps;list-style:none;display:inline-flex}.contents summary::-webkit-details-marker{display:none}.contents summary:after{content:"›";font-size:1.3em;transition:rotate .15s}.contents[open] summary:after{rotate:90deg}.contents ol{columns:2 16rem;column-gap:2.4em;margin:10px 0 0;padding-inline-start:1.6em}.contents li{break-inside:avoid;margin-bottom:4px}.contents li::marker{color:var(--accent);font-variant-numeric:oldstyle-nums}.contents a{color:var(--ink);text-decoration:none}@media (hover:hover){.contents a:hover{text-decoration:underline;text-decoration-color:var(--accent)}}@media print{.theme-toggle,.skip{display:none}}.sn-ref{font:600 .72em/1 var(--font-text);vertical-align:.5em;color:var(--accent);cursor:pointer;background:0 0;border:0;border-radius:3px;min-width:1.2em;margin:0 1px;padding:2px}.sn-ref:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.sidenote,.marginnote{color:var(--muted);border-inline-start:1px solid var(--rule);margin:.6em 0 .8em;padding-inline-start:14px;font-size:15px;line-height:1.5;display:none}.sidenote.open,.marginnote.open{display:block}.sidenote:before{content:attr(data-n) ". ";font:600 13px/1 var(--font-text);color:var(--accent)}@media (width>=1180px){.sn-ref{pointer-events:none}.sidenote,.marginnote{float:right;clear:right;border:0;width:13.5rem;margin:.2em -15.75rem 1em 0;padding:0;font-size:14px;display:block;position:relative}figure.demo.wide{clear:both}}a.cite{font:600 .78em/1 var(--font-text);vertical-align:.35em;color:var(--accent);white-space:nowrap;padding:0 1px;text-decoration:none}dfn,.term{text-decoration:underline dotted var(--muted);text-underline-offset:.22em;cursor:help;font-style:normal;text-decoration-thickness:1.5px}dfn:focus-visible,.term:focus-visible,a.cite:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.tip{z-index:30;background:color-mix(in srgb, var(--ink) 6%, var(--bg));max-width:min(22rem,100vw - 32px);color:var(--ink);border:1px solid var(--rule);font:14.5px/1.45 var(--font-serif);pointer-events:none;opacity:0;border-radius:8px;padding:10px 14px;transition-property:opacity,translate;transition-duration:.15s;position:absolute;translate:0 4px;box-shadow:0 12px 32px -12px #00000059}.tip.show{opacity:1;translate:0}.tip b{font-weight:650}.references{padding-inline-start:1.8em;font-size:.9em;line-height:1.5}.references li{margin-bottom:10px;padding-inline-start:4px}.references li::marker{color:var(--muted);font:600 .9em var(--font-text)}.references li:target{background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:4px}.callout{--c:var(--accent);background:color-mix(in srgb, var(--c) 7%, transparent);border-inline-start:3px solid var(--c);border-radius:8px;margin:1.8em 0;padding:16px 20px 16px 18px;font-size:.95em;line-height:1.55}.callout:before{content:attr(data-label);font:600 14px/1.2 var(--font-serif);letter-spacing:.07em;color:var(--c);margin-bottom:4px;font-variant-caps:all-small-caps;display:block}.callout.key{--c:var(--blue)}.callout.key:not([data-label]):before{content:"Key idea"}.callout.mistake{--c:var(--red)}.callout.mistake:not([data-label]):before{content:"A common mistake"}.callout.try{--c:var(--green)}.callout.try:not([data-label]):before{content:"Try this"}.callout.history{--c:var(--brass)}.callout.history:not([data-label]):before{content:"A little history"}.callout.note:not([data-label]):before{content:"Note"}.callout>:last-child{margin-bottom:0}details.deeper{border-block:1px solid var(--rule);margin:1.8em 0}details.deeper>summary{cursor:pointer;font:italic 600 1.02em/1.35 var(--font-serif);color:var(--ink);align-items:baseline;gap:10px;padding:14px 0;list-style:none;display:flex}details.deeper>summary::-webkit-details-marker{display:none}details.deeper>summary:before{content:"+";width:1.1em;font:500 1.15em/1 var(--font-text);color:var(--accent);flex:none}details.deeper[open]>summary:before{content:"−"}details.deeper>summary .hint{font:400 13.5px/1 var(--font-text);color:var(--muted);white-space:nowrap;margin-inline-start:auto;font-style:normal}details.deeper>summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}details.deeper>:not(summary){margin-inline:0}details.deeper[open]{padding-bottom:6px}.quiz{background:color-mix(in srgb, var(--ink) 4%, transparent);border-radius:8px;margin:1.8em 0;padding:16px 18px}.quiz:before{content:"Predict";font:600 14px/1.2 var(--font-serif);letter-spacing:.07em;color:var(--accent);margin-bottom:4px;font-variant-caps:all-small-caps;display:block}.quiz>p:first-of-type{margin-bottom:12px}.quiz .choices{flex-wrap:wrap;gap:8px;display:flex}.quiz button{font:500 15px/1.2 var(--font-text);color:var(--ink);background:var(--bg);border:1px solid var(--faint);cursor:pointer;text-align:start;border-radius:8px;min-height:40px;padding:9px 14px;transition-property:scale,border-color,background-color;transition-duration:.15s}@media (hover:hover){.quiz button:hover{border-color:var(--muted)}}.quiz button:active{scale:.96}.quiz button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.quiz button.right{border-color:var(--green);background:color-mix(in srgb, var(--green) 12%, var(--bg))}.quiz button.wrong{border-color:var(--red);background:color-mix(in srgb, var(--red) 9%, var(--bg))}.quiz button.right:after{content:" ✓";color:var(--green)}.quiz button.wrong:after{content:" ✗";color:var(--red)}.quiz .why{margin:12px 0 0;font-size:.95em;display:none}.quiz.answered .why{display:block}article{counter-reset:section figure table}.table-wrap{margin:2em 0;overflow-x:auto}article table{border-collapse:collapse;width:100%;font:15px/1.4 var(--font-text);font-variant-numeric:lining-nums tabular-nums;counter-increment:table}article table caption{caption-side:bottom;text-align:start;font:15px/1.5 var(--font-serif);color:var(--muted);padding-top:10px}article table caption:before{content:"Table " counter(table);letter-spacing:.05em;color:var(--ink);margin-inline-end:.6em;font-variant-caps:all-small-caps;font-weight:600}article :is(th,td){text-align:start;border-bottom:1px solid var(--rule);vertical-align:top;padding:8px 12px}article th{color:var(--ink);border-bottom:1.5px solid var(--ink);font-weight:600}article thead tr:first-child th{border-top:1.5px solid var(--ink)}article td.num,article th.num{text-align:end}article tbody tr:last-child td{border-bottom:1.5px solid var(--ink)}pre{background:color-mix(in srgb, var(--ink) 4%, transparent);font:13.5px/1.6 var(--font-mono);tab-size:2;border-radius:8px;margin:1.8em 0;padding:16px 18px;overflow-x:auto}pre code{font-size:inherit;background:0 0;padding:0}.tok-c{color:var(--muted);font-style:italic}.tok-s{color:var(--green)}.tok-n{color:var(--orange)}.tok-k{color:var(--purple);font-weight:600}.tok-f{color:var(--blue)}a.figref{white-space:nowrap}.byline{font:15px/1.4 var(--font-serif);color:var(--muted);margin:18px 0 0}@media (prefers-reduced-motion:reduce){.tip{transition:none}}:root{--safis-paper:var(--bg);--safis-ink:var(--ink);--safis-muted:var(--muted);--safis-rule:var(--faint)}.code-block{background:color-mix(in srgb, var(--ink) 3.5%, transparent);box-shadow:inset 0 0 0 1px var(--chip-line);border-radius:10px;margin:1.8em 0;position:relative;overflow:hidden}.code-title{font:500 12.5px/1 var(--font-mono);color:var(--muted);letter-spacing:.01em;border-bottom:1px solid var(--chip-line);padding:11px 18px}.code-block pre.shiki{font:13.5px/1.65 var(--font-mono);tab-size:2;border-radius:0;margin:0;padding:14px 0;overflow-x:auto;background:0 0!important}.code-block pre.shiki code{min-width:max-content;font-size:inherit;background:0 0;padding:0;display:block}.code-block .line{width:100%;padding:0 18px;display:inline-block;position:relative}.code-block .shiki span{color:var(--shiki-light)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .code-block .shiki span{color:var(--shiki-dark)}}:root[data-theme=dark] .code-block .shiki span{color:var(--shiki-dark)}.code-block[data-numbered] code{counter-reset:ln}.code-block[data-numbered] .line{padding-left:3.6em}.code-block[data-numbered] .line:before{counter-increment:ln;content:counter(ln);text-align:right;width:2.6em;color:var(--faint);font-variant-numeric:tabular-nums;position:absolute;left:0}.code-block .line.highlighted{background:var(--chip);box-shadow:inset 2px 0 0 var(--ink)}.code-block .has-focused .line:not(.focused){opacity:.4;transition:opacity .25s var(--ease-out)}.code-block .has-focused:hover .line{opacity:1}.code-block .line.diff.add{background:color-mix(in srgb, var(--green) 12%, transparent)}.code-block .line.diff.remove{background:color-mix(in srgb, var(--red) 11%, transparent)}.code-block .line.diff.remove>span{opacity:.78}.code-block .line.diff.hunk{color:var(--muted);background:var(--chip)}.code-block:not([data-numbered]) .shiki:not(.diff-file) .line.diff:before{font-weight:600;position:absolute;left:6px}.code-block:not([data-numbered]) .shiki:not(.diff-file) .line.diff.add:before{content:"+";color:var(--green)}.code-block:not([data-numbered]) .shiki:not(.diff-file) .line.diff.remove:before{content:"−";color:var(--red)}.code-copy{z-index:1;font:500 12px/1 var(--font-text);color:var(--muted);background:color-mix(in srgb, var(--panel) 85%, transparent);box-shadow:inset 0 0 0 1px var(--chip-line);cursor:pointer;opacity:0;transition:opacity .18s var(--ease-out), color .18s var(--ease-out);border:0;border-radius:7px;padding:6px 9px;position:absolute;top:7px;right:8px}.code-block:hover .code-copy,.code-copy:focus-visible,.code-copy.done{opacity:1}.code-copy:hover{color:var(--ink)}.code-copy:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (hover:none){.code-copy{opacity:1}}figure.diagram{counter-increment:figure;margin:2.4em 0 2.6em}figure.diagram.wide{width:min(calc(100vw - 40px), var(--wide));margin-left:50%;transform:translate(-50%)}figure.diagram figcaption{font:15.5px/1.5 var(--font-serif);color:var(--muted);text-wrap:pretty;margin:12px 2px 0}figure.diagram figcaption:before{content:"Figure " counter(figure);letter-spacing:.05em;color:var(--ink);margin-right:.6em;font-variant-caps:all-small-caps;font-weight:600}.mermaid-svg{overflow-x:auto}.mermaid-svg svg{--bg:var(--safis-paper);--fg:var(--safis-ink);--muted:var(--safis-muted);--accent:var(--safis-ink);--line:color-mix(in srgb, var(--safis-ink) 55%, var(--safis-paper));--border:color-mix(in srgb, var(--safis-ink) 28%, var(--safis-paper));--surface:color-mix(in srgb, var(--safis-ink) 4%, var(--safis-paper));max-width:100%;height:auto;margin:0 auto;display:block}.mermaid-svg text{font-family:var(--font-text)}pre.mermaid{white-space:pre-wrap;color:var(--muted)}@media (width<=560px){.code-block{box-shadow:inset 0 1px 0 var(--chip-line), inset 0 -1px 0 var(--chip-line);border-radius:0;margin-inline:-16px}.code-block pre.shiki{font-size:12.5px}}:root{--bar-h:56px;--safis-bar:var(--bar-h);--page:74rem;--prose:41rem;--gutter:clamp(16px, 4vw, 40px);--brand:var(--orange);--surface:color-mix(in srgb, var(--ink) 2.6%, var(--bg));--surface-2:color-mix(in srgb, var(--ink) 5%, var(--bg));--line:color-mix(in srgb, var(--ink) 10%, transparent);--code-bg:color-mix(in srgb, var(--ink) 3.5%, var(--bg));--radius:14px}html{scroll-padding-top:calc(var(--bar-h) + 16px)}body{overflow-x:clip}.wrap{width:100%;max-width:var(--page);padding-inline:var(--gutter);margin:0 auto}.prose{max-width:var(--prose)}.sans{font-family:var(--font-text)}.lining{font-variant-numeric:lining-nums tabular-nums}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}.safis-reveal figure.demo .plate{opacity:1!important;transition:none!important;translate:none!important}.theme-toggle .ti{display:none}html[data-theme-mode=auto] .theme-toggle .ti-auto,html:not([data-theme-mode]) .theme-toggle .ti-auto,html[data-theme-mode=light] .theme-toggle .ti-light,html[data-theme-mode=dark] .theme-toggle .ti-dark{display:block}header.sbar{z-index:40;height:var(--bar-h);background:color-mix(in srgb, var(--bg) 84%, transparent);backdrop-filter:saturate(1.5)blur(14px);border-bottom:1px solid var(--line);margin:0;position:sticky;top:0}header.sbar:after{content:none}.sbar .wrap{align-items:center;gap:14px;max-width:none;height:100%;display:flex}.sbar.contained .wrap{max-width:var(--page)}.brand{color:var(--ink);font:560 20px/1 var(--font-display);letter-spacing:-.01em;flex:none;align-items:center;gap:9px;text-decoration:none;display:inline-flex}.brand .mark{width:24px;height:24px;color:var(--ink)}.snav{font:500 14.5px/1 var(--font-text);align-items:center;gap:4px;margin-inline-start:18px;display:flex}.snav a{color:var(--muted);border-radius:8px;padding:9px 11px;text-decoration:none;transition:color .15s,background-color .15s;position:relative}.snav a:hover{color:var(--ink);background:var(--chip)}.snav a[aria-current=page]{color:var(--ink)}.snav a[aria-current=page]:after{content:"";background:var(--brand);border-radius:2px;height:2px;position:absolute;bottom:-10px;left:11px;right:11px}.sbar-end{align-items:center;gap:6px;margin-inline-start:auto;display:flex}.ibtn{width:36px;height:36px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:9px;place-items:center;padding:0;text-decoration:none;transition:color .15s,background-color .15s;display:grid}.ibtn:hover{color:var(--ink);background:var(--chip)}.ibtn svg{width:17px;height:17px}.ibtn:focus-visible,.snav a:focus-visible,.brand:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.sbar .theme-toggle,.sbar .toc-toggle{box-shadow:none;background:0 0;border:0;border-radius:9px;width:36px;height:36px;position:static;inset:auto}.sbar .theme-toggle:hover,.sbar .toc-toggle:hover{background:var(--chip)}.sbar .toc-toggle{margin-inline-start:-8px}.sbar .theme-toggle svg,.sbar .toc-toggle svg{width:17px;height:17px}.gh-stars{font:500 13px/1 var(--font-text)}.menu{display:none;position:relative}.menu>summary{list-style:none}.menu>summary::-webkit-details-marker{display:none}.menu-panel{background:var(--bg);border:1px solid var(--line);min-width:220px;font:500 15px/1.2 var(--font-text);border-radius:12px;padding:8px;display:grid;position:absolute;top:calc(100% + 10px);right:0;box-shadow:0 24px 48px -20px #00000059}.menu-panel a{color:var(--ink);border-radius:8px;padding:11px 12px;text-decoration:none}.menu-panel a:hover,.menu-panel a[aria-current=page]{background:var(--chip)}@media (width<=860px){.snav{display:none}.menu{display:block}.sbar .gh{display:none}}footer.sfoot{border-top:1px solid var(--line);font:14.5px/1.5 var(--font-text);color:var(--muted);margin-top:120px;padding:48px 0 64px}.sfoot .grid{grid-template-columns:1.6fr repeat(3,1fr);gap:32px;display:grid}.sfoot h4{font:600 12px/1 var(--font-text);letter-spacing:.09em;text-transform:uppercase;color:var(--ink);margin:0 0 14px}.sfoot ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.sfoot li{margin:0}.sfoot a{color:var(--muted);text-decoration:none}.sfoot a:hover{color:var(--ink)}.sfoot .about p{max-width:22rem;margin:12px 0 0}.sfoot .fine{border-top:1px solid var(--line);flex-wrap:wrap;gap:8px 24px;margin-top:40px;padding-top:20px;font-size:13px;display:flex}@media (width<=760px){.sfoot .grid{grid-template-columns:1fr 1fr}.sfoot .about{grid-column:1/-1}}main.site{max-width:none;margin:0;padding:0}.phead{border-bottom:1px solid var(--line);padding:clamp(56px,9vw,112px) 0 clamp(40px,6vw,72px)}header.phead{margin:0}header.phead:after{content:none}.eyebrow{font:600 12.5px/1 var(--font-text);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);align-items:center;gap:9px;margin:0 0 22px;display:inline-flex}.eyebrow:before{content:"";background:var(--brand);border-radius:50%;width:7px;height:7px}.phead h1,.hero h1{font:540 clamp(2.5rem, 5.4vw, 4.4rem)/1.02 var(--font-display);letter-spacing:-.022em;text-wrap:balance;max-width:18ch;margin:0 0 22px}.phead h1 em,.hero h1 em{color:var(--brand);font-style:italic}.lede-x{font:400 clamp(1.12rem, 1.6vw, 1.3rem)/1.55 var(--font-serif);color:var(--muted);text-wrap:pretty;max-width:38rem;margin:0}.metaline{font:500 13.5px/1.4 var(--font-text);color:var(--muted);flex-wrap:wrap;gap:6px 20px;margin-top:28px;display:flex}.metaline b{color:var(--ink);font-weight:600}.sec{padding:clamp(56px,8vw,96px) 0 0}.sec-grid{grid-template-columns:11rem minmax(0,1fr);gap:0 40px;display:grid}.sec-num{font:600 12.5px/1.9 var(--font-text);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);padding-top:.55em}.sec-num b{font:540 2rem/1 var(--font-display);letter-spacing:-.01em;color:var(--ink);text-transform:none;font-variant-numeric:lining-nums;margin-bottom:8px;display:block}@media (width<=900px){.sec-grid{grid-template-columns:1fr}.sec-num{padding:0 0 10px}.sec-num b{font-size:1rem;font-family:var(--font-text);color:var(--brand);margin:0 10px 0 0;font-weight:700;display:inline}}.sec h2{font:540 clamp(1.75rem, 3.2vw, 2.45rem)/1.1 var(--font-display);letter-spacing:-.016em;text-wrap:balance;margin:0 0 16px}.sec h2+.sub,.sub{font:400 1.1rem/1.6 var(--font-serif);color:var(--muted);max-width:var(--prose);text-wrap:pretty;margin:0 0 36px}.sec h3{font:600 17px/1.3 var(--font-text);letter-spacing:-.005em;margin:0 0 8px}.sec p{max-width:var(--prose)}.body-text{font:400 1.06rem/1.66 var(--font-serif)}.body-text p{margin:0 0 1.1em}.abstract-x{border-radius:var(--radius);background:var(--surface);border:1px solid var(--line);max-width:46rem;font:400 1.04rem/1.62 var(--font-serif);margin:40px 0 0;padding:22px 26px}.abstract-x>b{font:600 12px/1 var(--font-text);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:12px;display:block}.abstract-x p{margin:0}.ctas{flex-wrap:wrap;gap:10px;margin-top:30px;display:flex}.btn{font:600 15px/1 var(--font-text);color:var(--ink);background:var(--chip);box-shadow:inset 0 0 0 1px var(--chip-line);transition:background-color .18s, translate .18s var(--ease-out);border-radius:11px;align-items:center;gap:8px;padding:12px 18px;text-decoration:none;display:inline-flex}.btn:hover{background:var(--chip-hover);translate:0 -1px}.btn.solid{background:var(--ink);color:var(--bg);box-shadow:none}.btn.solid:hover{background:color-mix(in srgb, var(--ink) 86%, var(--bg))}.btn .arr{transition:translate .2s var(--ease-out)}.btn:hover .arr{translate:3px}.cmd{background:var(--ink);max-width:34rem;color:var(--bg);font:500 15px/1 var(--font-mono);border-radius:12px;align-items:center;gap:12px;padding:7px 7px 7px 16px;display:flex;box-shadow:0 14px 34px -18px #0000008c}.cmd .pr{opacity:.45;user-select:none}.cmd code{min-width:0;color:inherit;font-size:inherit;white-space:nowrap;text-overflow:ellipsis;background:0 0;flex:1;padding:0;overflow:hidden}.copy{cursor:pointer;font:600 12.5px/1 var(--font-text);color:inherit;background:color-mix(in srgb, var(--bg) 16%, transparent);border:0;border-radius:8px;flex:none;padding:9px 12px;transition:background-color .18s}.copy:hover{background:color-mix(in srgb, var(--bg) 26%, transparent)}@media (width<=480px){.cmd{gap:8px;padding-inline-start:12px;font-size:13px}}.codebox{border-radius:var(--radius);border:1px solid var(--line);background:var(--code-bg);margin:0;overflow:hidden}.codebox .cb-head{border-bottom:1px solid var(--line);font:500 12.5px/1 var(--font-text);color:var(--muted);align-items:center;gap:10px;padding:9px 10px 9px 16px;display:flex}.codebox .cb-head .copy{color:var(--muted);background:var(--chip);margin-inline-start:auto}.codebox .cb-head .copy:hover{color:var(--ink);background:var(--chip-hover)}.codebox pre.astro-code{font:13.5px/1.65 var(--font-mono);border-radius:0;margin:0;padding:16px 18px;overflow-x:auto;background:0 0!important}.codebox pre.astro-code[style*=pre-wrap]{padding-inline-start:18px}.codebox pre.astro-code .line{display:inline}.astro-code,.astro-code span{color:var(--shiki-light)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .astro-code,:root:not([data-theme=light]) .astro-code span{color:var(--shiki-dark)}}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)}.chip-code{font:500 .84em var(--font-mono);background:var(--chip);white-space:nowrap;border-radius:5px;padding:.14em .4em}.cards-x{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:44px 28px;display:grid}@media (width>=1000px){.cards-x{grid-template-columns:repeat(3,minmax(0,1fr))}}.ecard{color:var(--ink);align-content:start;gap:6px;text-decoration:none;display:grid}.ecard .shot{background:var(--surface);border:1px solid var(--line);transition:translate .28s var(--ease-out), box-shadow .28s, border-color .28s;background:var(--bg);border-radius:12px;margin-bottom:10px;display:block;position:relative;overflow:hidden}.ecard .shot img,.ecard .shot .noimg{aspect-ratio:16/10;object-fit:contain;width:100%;height:auto;display:block}.ecard:hover .shot{border-color:color-mix(in srgb, var(--ink) 18%, transparent);translate:0 -3px;box-shadow:0 22px 44px -26px #00000080}.ecard .cat-x{font:600 11.5px/1 var(--font-text);letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}.ecard .t{font:600 1.16rem/1.28 var(--font-serif);text-wrap:balance}.ecard:hover .t{text-decoration:underline;text-decoration-color:var(--brand);text-underline-offset:.18em;text-decoration-thickness:1.5px}.ecard .d{color:var(--muted);font:400 14.5px/1.5 var(--font-text);-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ecard .m{font:500 12.5px/1 var(--font-text);color:var(--muted);font-variant-numeric:lining-nums tabular-nums;margin-top:4px}.badge-new{background:var(--bg);color:var(--ink);font:700 10.5px/1 var(--font-text);letter-spacing:.08em;text-transform:uppercase;border-radius:999px;padding:5px 9px;position:absolute;top:10px;left:10px;box-shadow:0 2px 10px #00000026}.shot .thumb-dark{display:none!important}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .shot .thumb-dark{display:block!important}:root:not([data-theme=light]) .shot .thumb-light{display:none!important}}:root[data-theme=dark] .shot .thumb-dark{display:block!important}:root[data-theme=dark] .shot .thumb-light{display:none!important}.tiles{border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-columns:repeat(4,minmax(0,1fr));gap:0;display:grid}.tile{color:var(--ink);border-inline-end:1px solid var(--line);align-content:start;gap:10px;padding:28px 24px 30px;text-decoration:none;transition:background-color .2s;display:grid;position:relative}.tile:last-child{border-inline-end:0}.tile:hover{background:var(--surface)}.tile .n{font:600 12px/1 var(--font-text);letter-spacing:.1em;color:var(--brand)}.tile h3{font:540 1.45rem/1.15 var(--font-display);letter-spacing:-.01em;margin:4px 0 0}.tile p{color:var(--muted);font:400 14.5px/1.5 var(--font-text);margin:0}.tile .go{font:600 14px/1 var(--font-text);margin-top:8px}.tile .go span{transition:translate .2s var(--ease-out);display:inline-block}.tile:hover .go span{translate:4px}@media (width<=1000px){.tiles{grid-template-columns:1fr 1fr}.tile:nth-child(2){border-inline-end:0}.tile:nth-child(-n+2){border-bottom:1px solid var(--line)}}@media (width<=560px){.tiles{grid-template-columns:1fr}.tile{border-inline-end:0;border-bottom:1px solid var(--line)}.tile:last-child{border-bottom:0}}.stats-x{border-bottom:1px solid var(--line);grid-template-columns:repeat(4,1fr);display:grid}.stats-x div{text-align:center;padding:26px 0}.stats-x b{font:540 2.1rem/1.05 var(--font-display);letter-spacing:-.01em;font-variant-numeric:lining-nums;display:block}.stats-x span{font:500 13.5px/1.3 var(--font-text);color:var(--muted)}@media (width<=640px){.stats-x{grid-template-columns:1fr 1fr}}.hero{text-align:center;padding:clamp(56px,9vw,104px) 0 0}.hero h1{max-width:15ch;margin-inline:auto}.hero .lede-x{margin-inline:auto}.hero .cmd{text-align:left;margin:34px auto 0}.hero .ctas{justify-content:center}.hero .agents{font:500 13.5px/1.5 var(--font-text);color:var(--muted);margin:22px 0 0}.hero .agents b{color:var(--ink);font-weight:600}.stage-x{background:var(--surface);border:1px solid var(--line);text-align:left;border-radius:20px;max-width:72rem;margin:56px auto 0;padding:14px clamp(10px,2vw,22px) 6px;box-shadow:0 40px 80px -56px #0000008c}.stage-x figure.demo{margin:0}.stage-x figure.demo figcaption{text-align:center}.split{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);align-items:start;gap:48px;display:grid}@media (width<=920px){.split{grid-template-columns:1fr;gap:28px}}.checks{font:400 15px/1.5 var(--font-text);color:var(--muted);gap:10px;margin:18px 0 0;padding:0;list-style:none;display:grid}.checks li{margin:0;padding-inline-start:24px;position:relative}.checks li:before{content:"";border-left:1.6px solid var(--brand);border-bottom:1.6px solid var(--brand);width:10px;height:6px;position:absolute;top:.5em;left:2px;rotate:-45deg}.checks b{color:var(--ink);font-weight:600}.band{background:var(--ink);color:var(--bg);border-radius:22px;grid-template-columns:1fr auto;align-items:center;gap:24px 40px;margin-top:clamp(72px,10vw,120px);padding:clamp(40px,6vw,64px) clamp(20px,5vw,56px);display:grid}.band h2{font:540 clamp(1.7rem, 3vw, 2.3rem)/1.1 var(--font-display);color:inherit;letter-spacing:-.015em;margin:0 0 8px}.band p{opacity:.7;font:400 1.05rem/1.5 var(--font-serif);margin:0}.band .cmd{background:color-mix(in srgb, var(--bg) 10%, var(--ink));box-shadow:none;min-width:min(100%,26rem);margin:0}@media (width<=820px){.band{grid-template-columns:1fr}}.pipeline{counter-reset:step;border-top:1px solid var(--line);margin:0;padding:0;list-style:none}.pipeline>li{counter-increment:step;border-bottom:1px solid var(--line);grid-template-columns:4.5rem minmax(0,1fr) minmax(0,.9fr);gap:8px 28px;margin:0;padding:26px 0;display:grid}.pipeline>li:before{content:counter(step, decimal-leading-zero);font:540 1.9rem/1 var(--font-display);color:var(--faint);font-variant-numeric:lining-nums}.pipeline h3{font:600 17px/1.3 var(--font-text);margin:0 0 6px}.pipeline p{color:var(--muted);font:400 15px/1.55 var(--font-text);margin:0}.pipeline .how{font:400 13.5px/1.55 var(--font-text);color:var(--muted)}.pipeline .how code{font-size:12.5px}@media (width<=860px){.pipeline>li{grid-template-columns:3rem minmax(0,1fr)}.pipeline .how{grid-column:2}}.principles{border-top:1px solid var(--line);grid-template-columns:repeat(2,minmax(0,1fr));gap:0;display:grid}.principles>div{border-bottom:1px solid var(--line);padding:26px 28px 28px 0}.principles>div:nth-child(odd){border-inline-end:1px solid var(--line)}.principles>div:nth-child(2n){padding-inline-start:28px}.principles p{color:var(--muted);font:400 15px/1.55 var(--font-text);margin:0}@media (width<=720px){.principles{grid-template-columns:1fr}.principles>div:nth-child(odd){border-inline-end:0}.principles>div:nth-child(2n){padding-inline-start:0}}.cols-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:40px;display:grid}@media (width<=820px){.cols-2{grid-template-columns:1fr}}.tbl{border-collapse:collapse;width:100%;font:400 14.5px/1.45 var(--font-text);font-variant-numeric:lining-nums tabular-nums}.tbl th,.tbl td{text-align:start;border-bottom:1px solid var(--line);vertical-align:top;padding:11px 14px 11px 0}.tbl th{color:var(--ink);border-bottom:1.5px solid var(--ink);font-weight:600}.tbl td{color:var(--muted)}.tbl td:first-child{color:var(--ink);font-weight:500}.tbl .r{text-align:end;padding-inline-end:0}.tbl-wrap{overflow-x:auto}.kinds-nav{flex-wrap:wrap;gap:8px;margin-top:32px;display:flex}.kinds-nav a{font:500 13.5px/1 var(--font-text);color:var(--muted);background:var(--chip);border-radius:999px;padding:8px 13px;text-decoration:none;transition:color .15s,background-color .15s}.kinds-nav a:hover{color:var(--ink);background:var(--chip-hover)}.kind-x{border-bottom:1px solid var(--line);scroll-margin-top:calc(var(--bar-h) + 12px);grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);align-items:start;gap:48px;padding:64px 0;display:grid}.kind-x:nth-of-type(2n) .kind-media{order:-1}.kind-x .k-n{font:600 12px/1 var(--font-text);letter-spacing:.1em;text-transform:uppercase;color:var(--brand);margin-bottom:14px}.kind-x h2{font:540 clamp(1.6rem, 2.8vw, 2.15rem)/1.12 var(--font-display);letter-spacing:-.015em;margin:0 0 14px}.kind-x p{color:var(--muted);font:400 1.03rem/1.62 var(--font-serif);margin:0 0 14px}.kind-x .seen{font:500 14px/1.4 var(--font-text);margin-top:16px}.kind-x .seen a{text-decoration-color:var(--brand);text-underline-offset:.2em}.kind-media figure.demo{margin:0}.kind-media .shot-x{border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);display:block;position:relative;overflow:hidden}.kind-media .shot-x img{width:100%;height:auto;display:block}.kind-media .cap{font:400 13.5px/1.45 var(--font-text);color:var(--muted);margin-top:10px}.kind-media .live{border-radius:var(--radius);border:1px solid var(--line);background:var(--bg);padding:10px 14px 2px}.kind-media .live figure.demo figcaption{font-size:14px}@media (width<=920px){.kind-x{grid-template-columns:1fr;gap:24px;padding:48px 0}.kind-x:nth-of-type(2n) .kind-media{order:0}}.shot-x .thumb-dark{display:none!important}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .shot-x .thumb-dark{display:block!important}:root:not([data-theme=light]) .shot-x .thumb-light{display:none!important}}:root[data-theme=dark] .shot-x .thumb-dark{display:block!important}:root[data-theme=dark] .shot-x .thumb-light{display:none!important}.install-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;display:grid}.icard{border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);align-content:start;gap:10px;padding:22px;display:grid}.icard h3{margin:0}.icard p{color:var(--muted);font:400 14.5px/1.5 var(--font-text);margin:0}.icard .codebox{margin-top:6px}@media (width<=960px){.install-grid{grid-template-columns:1fr}}.term{border-radius:var(--radius);color:#e8e8e8;border:1px solid var(--line);font:13.5px/1.7 var(--font-mono);background:#111;overflow:hidden}.term .tb{border-bottom:1px solid #ffffff14;gap:7px;padding:12px 14px;display:flex}.term .tb i{background:#ffffff29;border-radius:50%;width:11px;height:11px}.term pre{color:inherit;font:inherit;white-space:pre-wrap;background:0 0;margin:0;padding:16px 18px 18px}.term .u{color:#fff}.term .p{color:#f59447}.term .m{color:#8c8c8c}.term-cap{font:400 13px/1.4 var(--font-text);color:var(--muted);margin:10px 0 0}.prompts-x{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.pcard{border-radius:var(--radius);border:1px solid var(--line);background:var(--bg);align-content:start;gap:12px;padding:22px 22px 20px;transition:border-color .2s;display:grid}.pcard:hover{border-color:color-mix(in srgb, var(--ink) 20%, transparent)}.pcard q{quotes:none;font:italic 400 1.08rem/1.5 var(--font-serif);color:var(--ink)}.pcard q:before{content:"› ";color:var(--brand);font-style:normal;font-weight:700}.pcard .get{font:400 14px/1.55 var(--font-text);color:var(--muted);margin:0}.pcard .get b{color:var(--ink);font-weight:600}.pcard .tags{flex-wrap:wrap;gap:6px;display:flex}.pcard .tags span{background:var(--chip);font:500 12px/1 var(--font-text);color:var(--muted);border-radius:999px;padding:4px 8px}.pcard .pcopy{color:var(--muted);font:600 13px/1 var(--font-text);cursor:pointer;background:0 0;border:0;justify-self:start;padding:0}.pcard .pcopy:hover{color:var(--ink)}@media (width<=820px){.prompts-x{grid-template-columns:1fr}}.tips{counter-reset:tip;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 40px;margin:0;padding:0;list-style:none;display:grid}.tips li{counter-increment:tip;border-top:1px solid var(--line);font:400 15px/1.55 var(--font-text);color:var(--muted);margin:0;padding:16px 0 16px 40px;position:relative}.tips li:before{content:counter(tip);background:var(--chip);width:24px;height:24px;color:var(--ink);font:700 12px/1 var(--font-text);border-radius:50%;place-items:center;display:grid;position:absolute;top:16px;left:0}.tips li b{color:var(--ink);font-weight:600}@media (width<=820px){.tips{grid-template-columns:1fr}}.tabs-x{flex-wrap:wrap;gap:6px;margin-bottom:14px;display:flex}.tabs-x button{cursor:pointer;font:600 13.5px/1 var(--font-text);color:var(--muted);background:var(--chip);border:0;border-radius:9px;padding:8px 14px}.tabs-x button[aria-selected=true]{background:var(--ink);color:var(--bg)}.tabpanel[hidden]{display:none}.filter{top:var(--bar-h);z-index:20;background:color-mix(in srgb, var(--bg) 90%, transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:36px;padding:16px 0;display:flex;position:sticky}.search{background:var(--chip);border-radius:11px;flex:260px;align-items:center;gap:10px;max-width:26rem;height:42px;padding:0 14px;display:flex}.search svg{width:16px;height:16px;color:var(--muted);flex:none}.search input{min-width:0;color:var(--ink);font:400 15px/1 var(--font-text);background:0 0;border:0;outline:none;flex:1}.search input::placeholder{color:var(--muted)}.search:focus-within{box-shadow:0 0 0 2px var(--ink)}.cats{flex-wrap:wrap;gap:6px;display:flex}.cats button{cursor:pointer;font:500 13.5px/1 var(--font-text);color:var(--muted);background:var(--chip);font-variant-numeric:lining-nums;border:0;border-radius:999px;padding:9px 13px}.cats button:hover{color:var(--ink)}.cats button[aria-pressed=true]{background:var(--ink);color:var(--bg)}.cats button span{opacity:.6;margin-inline-start:4px}.empty-x{text-align:center;color:var(--muted);font:400 1.05rem/1.5 var(--font-serif);padding:48px 0}.sbar~.page main{padding-top:64px}.sbar~.page .backlink{display:none}.sbar~.page .toc .site{font:600 11.5px/1.2 var(--font-text);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);margin-bottom:6px}.sbar~.page .toc .site:hover{color:var(--ink)}.sbar~.page .toc h2:first-of-type{margin-top:14px}@media (width>=1240px){.sbar~.page.has-toc .toc{padding-top:40px}}@media (width<=1239.98px){.safis-toc-open .sbar~.page.has-toc .toc{top:var(--bar-h);box-shadow:1px 0 0 var(--rule), 24px 0 60px -24px #00000073;padding-top:20px}.safis-toc-open .sbar~.page.has-toc:after{top:var(--bar-h)}}.rise{opacity:1;translate:none}
