:root{--ground:#FAFBFA;--surface:#F1F4F3;--card:#FFFFFF;--line:#D2DBD9;--line-soft:#E3E9E7;--ink:#101A18;--ink-2:#3C4A47;--ink-3:#5A6864;--accent:#0E6B65;--accent-deep:#0A4F4A;--accent-soft:#DDEEEC;--accent-line:#8FC2BD;--chip-teal:#CBE7E3;--chip-bg:#EDF3F2;--chip-line:#CBD9D6;--band:#C9DEDB;--red:#8A3A3A;--red-soft:#C98A8A;--red-mid:#A85C5C;--green:#2F6B4A;--green-soft:#8FBFA3;--amber:#7A5C2E;--series3:#3C6E8F;--series4:#8A5A6B;--series5:#5B7A3C;--header-bg:rgba(250,251,250,0.93)}
html[data-theme="dark"]{--ground:#0D1312;--surface:#151D1C;--card:#111917;--line:#2B3735;--line-soft:#202B2A;--ink:#E5ECEA;--ink-2:#B2C0BD;--ink-3:#8A9895;--accent:#5FC9BE;--accent-deep:#8ADDD4;--accent-soft:#10302E;--accent-line:#2E6B65;--chip-teal:#173B38;--chip-bg:#14201F;--chip-line:#2B3735;--band:#24413E;--red:#E2938E;--red-soft:#7A4340;--red-mid:#C97C7C;--green:#7FD3A6;--green-soft:#2F6B4A;--amber:#D3AC63;--series3:#7FB4D6;--series4:#CE93A6;--series5:#A5C77E;--header-bg:rgba(13,19,18,0.92)}
body{margin:0;background:var(--ground);color:var(--ink);font-family:'Public Sans',system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased}
*{box-sizing:border-box}
a{color:var(--accent);text-decoration:none}
a:hover{color:var(--accent-deep);text-decoration:underline}
::selection{background:var(--accent-soft)}
p{margin:0 0 0.9rem;text-wrap:pretty}
h1,h2,h3{margin:0;font-family:'Source Serif 4',ui-serif,Georgia,serif;font-weight:600;letter-spacing:-0.015em;line-height:1.15}
input{font-family:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ptmenu > summary::-webkit-details-marker{display:none}
.ptmenu > summary::marker{content:""}
.ptmenu > summary:hover{color:var(--ink)}
@media (max-width: 900px){
  main div{grid-template-columns:1fr !important}
  header > div{flex-wrap:wrap;row-gap:0.5rem}
  header nav{order:3;width:100%;gap:1rem !important}
  h1{font-size:2rem !important}
  main{padding-left:1.1rem !important;padding-right:1.1rem !important}
  pre{font-size:0.75rem !important}
}
@media (max-width: 620px){
  header nav{gap:0.8rem !important;font-size:0.8125rem}
  .ptmenu > div{left:0 !important;right:auto;min-width:min(14rem,80vw) !important}
  h1{font-size:1.75rem !important}
  h2{font-size:1.3rem !important}
  table{font-size:0.75rem}
  td,th{padding-left:0.55rem !important;padding-right:0.55rem !important}
  main div > span:first-child{width:auto !important}
}
@media (max-width: 460px){
  header nav{gap:0.7rem !important;font-size:0.75rem}
  h1{font-size:1.55rem !important}
  main{padding-left:0.9rem !important;padding-right:0.9rem !important}
}
summary::marker{color:var(--accent-line)}
@media (prefers-color-scheme: dark){
  html:not([data-theme="light"]){--ground:#0D1312;--surface:#151D1C;--card:#111917;--line:#2B3735;--line-soft:#202B2A;--ink:#E5ECEA;--ink-2:#B2C0BD;--ink-3:#8A9895;--accent:#5FC9BE;--accent-deep:#8ADDD4;--accent-soft:#10302E;--accent-line:#2E6B65;--chip-teal:#173B38;--chip-bg:#14201F;--chip-line:#2B3735;--band:#24413E;--red:#E2938E;--red-soft:#7A4340;--red-mid:#C97C7C;--green:#7FD3A6;--green-soft:#2F6B4A;--amber:#D3AC63;--series3:#7FB4D6;--series4:#CE93A6;--series5:#A5C77E;--header-bg:rgba(13,19,18,0.92)}
}

:root{--pt-head-h:3.3rem}
html{scroll-padding-top:calc(var(--pt-head-h) + 1rem)}
.pt-skip{position:absolute;left:-999px;top:0.5rem;z-index:90;background:var(--card);
  color:var(--accent);border:1px solid var(--line);border-radius:6px;
  padding:0.4rem 0.8rem;font-size:0.875rem}
.pt-skip:focus{left:0.75rem}

.pt-head{position:sticky;top:0;z-index:40;background:var(--header-bg);
  backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.pt-head-row{max-width:1440px;margin:0 auto;padding:0.7rem 1.5rem;
  display:flex;align-items:center;gap:1.25rem}
.pt-brand{display:flex;align-items:center;gap:0.5rem;color:var(--ink);flex:none}
.pt-brand img{flex:none}
.pt-wordmark{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:1.0625rem;font-weight:500;letter-spacing:-0.01em;
  white-space:nowrap}
.pt-wordmark-sub{color:var(--ink-3);font-weight:400}
.pt-peer{font-size:0.875rem;color:var(--ink-3);padding:0.2rem 0;white-space:nowrap}
.pt-peer:hover{color:var(--accent)}
.pt-spacer{flex:1}

.pt-searchbtn{display:flex;align-items:center;gap:0.45rem;font-size:0.8125rem;
  color:var(--ink-3);background:var(--surface);border:1px solid var(--line);
  border-radius:99px;padding:3px 10px 3px 10px;cursor:pointer;flex:none}
.pt-searchbtn svg{flex:none}
.pt-key{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.625rem;border:1px solid var(--line);
  border-radius:4px;padding:0 4px;color:var(--ink-3)}

/* The phone menu: the same groups as the sidebar, in a disclosure that
   drops below the masthead and spans it. */
.pt-mnav{flex:none}
.pt-mnav > summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:0.35rem;
  font-size:0.8125rem;color:var(--ink-2);background:var(--surface);
  border:1px solid var(--line);border-radius:99px;padding:3px 11px}
.pt-mnav > summary::-webkit-details-marker{display:none}
.pt-mnav[open] > summary{color:var(--accent);border-color:var(--accent-line)}
.pt-mnav-panel{position:absolute;left:0;right:0;top:100%;background:var(--card);
  border-bottom:1px solid var(--line);box-shadow:0 16px 32px rgba(0,0,0,0.14);
  max-height:calc(100vh - var(--pt-head-h));overflow-y:auto;padding:1.1rem 1.25rem 1.4rem}

.pt-overlay{position:fixed;inset:0;z-index:80;display:none;align-items:flex-start;
  justify-content:center;padding:5rem 1.5rem 1.5rem;background:rgba(16,26,24,0.32)}
.pt-overlay-box{width:100%;max-width:40rem;background:var(--card);border:1px solid var(--line);
  border-radius:12px;box-shadow:0 24px 60px rgba(0,0,0,0.28);overflow:hidden}
.pt-overlay input{width:100%;border:0;border-bottom:1px solid var(--line-soft);
  background:var(--card);color:var(--ink);font-size:1rem;padding:0.95rem 1.1rem;outline:none}
.pt-results{max-height:min(26rem,60vh);overflow-y:auto;padding:0.4rem}
.pt-overlay-foot{display:flex;justify-content:space-between;gap:1rem;padding:0.55rem 1.1rem;
  border-top:1px solid var(--line-soft);background:var(--surface);
  font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.625rem;color:var(--ink-3)}
.pt-hit{display:flex;justify-content:space-between;gap:0.9rem;align-items:baseline;
  padding:0.55rem 0.7rem;border-radius:6px;color:var(--ink)}
.pt-hit-on{background:var(--accent-soft)}
.pt-hit-main{display:flex;flex-direction:column;gap:1px;min-width:0}
.pt-hit-title{font-family:'Source Serif 4',ui-serif,Georgia,serif;font-size:0.9375rem;font-weight:600;color:var(--ink)}
.pt-hit-on .pt-hit-title{color:var(--accent-deep)}
.pt-hit-code{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem}
.pt-hit-where{font-size:0.75rem;color:var(--accent)}
.pt-hit-text{font-size:0.75rem;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.pt-hit-text mark{background:transparent;color:var(--ink);font-weight:600}
.pt-hit-group{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.625rem;letter-spacing:0.06em;color:var(--ink-3);
  flex:none;text-transform:uppercase}

/* The columns. One on a phone; the navigation joins at 1024px and the
   contents list at 1280px. The sidebar and the list come first in the
   document and are placed here, so the page's own markup stays one span. */
.pt-layout{max-width:1440px;margin:0 auto;display:grid;grid-template-columns:minmax(0,1fr)}
.pt-main{min-width:0}
.pt-side,.pt-toc{display:none}
@media (min-width: 1024px){
  .pt-layout{grid-template-columns:15rem minmax(0,1fr)}
  .pt-side{display:block;grid-column:1;grid-row:1;position:sticky;top:var(--pt-head-h);
    align-self:start;max-height:calc(100vh - var(--pt-head-h));overflow-y:auto;
    overscroll-behavior:contain;
    padding:1.9rem 1rem 2rem 1.5rem}
  .pt-main{grid-column:2;grid-row:1;border-left:1px solid var(--line-soft)}
  .pt-mnav{display:none}
}
@media (min-width: 1280px){
  .pt-layout.pt-has-toc{grid-template-columns:15rem minmax(0,1fr) 14rem}
  .pt-has-toc .pt-toc{display:block;grid-column:3;grid-row:1;position:sticky;
    top:var(--pt-head-h);align-self:start;max-height:calc(100vh - var(--pt-head-h));
    overflow-y:auto;overscroll-behavior:contain;padding:2.6rem 1.5rem 2rem 0.25rem}
  .pt-toc-m{display:none}
}

.pt-nav-group{margin:0 0 1.5rem}
.pt-nav-head{margin:0 0 0.35rem;padding:0 0.6rem;font-size:0.875rem;font-weight:600;
  line-height:1.35;color:var(--ink)}
.pt-nav-list{list-style:none;margin:0;padding:0;display:grid;gap:1px}
.pt-nav-list a{display:block;padding:0.3rem 0.6rem;border-radius:5px;font-size:0.875rem;
  line-height:1.35;color:var(--ink-2)}
.pt-nav-list a:hover{color:var(--accent);background:var(--surface)}
.pt-nav-list a[aria-current="page"]{color:var(--accent-deep);background:var(--accent-soft);
  font-weight:500}
.pt-nav-foot{margin:1.6rem 0 0;padding:1rem 0.6rem 0;border-top:1px solid var(--line-soft);
  display:grid;gap:0.4rem;font-size:0.8125rem}
.pt-nav-foot a{color:var(--ink-2)}
.pt-nav-foot a:hover{color:var(--accent)}
.pt-version{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--ink-3)}
.pt-version span{white-space:nowrap}

.pt-toc-head{margin:0 0 0.6rem;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;letter-spacing:0.08em;
  text-transform:uppercase;color:var(--ink-3)}
.pt-toc-list{list-style:none;margin:0;padding:0;border-left:1px solid var(--line);display:grid}
.pt-toc-list a{display:block;margin-left:-1px;padding:0.25rem 0 0.25rem 0.8rem;
  border-left:2px solid transparent;font-size:0.8125rem;line-height:1.35;color:var(--ink-3)}
.pt-toc-list .pt-toc-3 a{padding-left:1.6rem;font-size:0.78rem}
.pt-toc-list a:hover{color:var(--ink)}
.pt-toc-list a.pt-toc-on{color:var(--accent);border-left-color:var(--accent)}
.pt-toc-m{max-width:1040px;margin:1.4rem auto 0;padding:0 1.5rem}
.pt-toc-m > details{border:1px solid var(--line);border-radius:6px;background:var(--surface)}
.pt-toc-m summary{cursor:pointer;padding:0.6rem 0.9rem;font-size:0.875rem;font-weight:500;
  color:var(--ink)}
.pt-toc-m .pt-toc-list{margin:0 0.9rem 0.8rem;max-height:60vh;overflow-y:auto}

.pt-foot{max-width:1040px;margin:0 auto;padding:0 1.5rem}
.pt-actions{display:flex;flex-wrap:wrap;gap:0.4rem 1.4rem;margin-top:3rem;font-size:0.8125rem}
.pt-actions a{color:var(--ink-3)}
.pt-actions a:hover{color:var(--accent)}
.pt-index{padding:2.8rem 0 0;margin-top:1.4rem;border-top:1px solid var(--line);
  display:flex;flex-direction:column;gap:1.1rem}
.pt-index h2{font-size:1.25rem}
.pt-index-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:0.9rem}
.pt-index-col{display:flex;flex-direction:column;gap:0.5rem;min-width:0}
.pt-index-door{font-family:'Source Serif 4',ui-serif,Georgia,serif;font-size:0.9375rem;font-weight:600;color:var(--ink)}
.pt-index-links{display:flex;flex-direction:column;gap:0.3rem}
.pt-index-links > *{display:flex;gap:0.4rem;align-items:baseline;
  font-size:0.8125rem;color:var(--ink-2)}
.pt-index-links > span{color:var(--accent)}
.pt-arrow{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;color:var(--accent-line);flex:none}
.pt-index-links > span .pt-arrow{color:inherit}
.pt-door-name{white-space:nowrap}

.pt-prevnext{display:flex;justify-content:space-between;gap:1rem;padding:2.5rem 0 0;
  margin-top:2.5rem;border-top:1px solid var(--line);font-size:0.875rem}
.pt-prevnext a{display:flex;flex-direction:column;gap:2px}
.pt-prevnext a.pt-next{text-align:right}
.pt-eyebrow{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;color:var(--ink-3)}

@media (max-width: 620px){
  .pt-head-row{padding:0.6rem 1rem;gap:0.7rem}
  .pt-peer,.pt-key{display:none}
  .pt-toc-m{padding:0 1rem}
}
@media (max-width: 440px){
  .pt-search-label{display:none}
  .pt-searchbtn{padding:4px 8px}
}

/* Markdown pages. See tools/docs/learn/md.py. */
#pt-root .pt-md{max-width:1040px;margin:0 auto;padding:0 1.5rem}
#pt-root .pt-md.pt-usage{max-width:none;margin:0;padding:0}
#pt-root .pt-md-crumb{display:flex;align-items:center;gap:0.5rem;padding:2.5rem 0 0;
  font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;letter-spacing:0.1em;color:var(--ink-3)}
#pt-root .pt-md-crumb a{color:var(--ink-3)}
#pt-root .pt-md-here{color:var(--accent)}

#pt-root .pt-md-lede{padding:1.2rem 0 0;display:flex;flex-direction:column;gap:1rem}
#pt-root .pt-md-lede h1{font-size:clamp(1.9rem,4vw,2.6rem);max-width:26ch;
  text-wrap:balance}
#pt-root .pt-md-lede > p:first-of-type{font-size:1.125rem}
#pt-root .pt-md-section{padding:2.5rem 0 0;display:flex;flex-direction:column;gap:0.8rem}
#pt-root .pt-md-section h2{font-size:1.5rem}
#pt-root .pt-md h3{font-size:1.0625rem;margin:0}
#pt-root .pt-md p{margin:0;color:var(--ink-2)}
/* Inline code a little smaller than the text around it. At the body's size
   the mono face stands taller than the prose and the lines that hold it
   open up. */
#pt-root code{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.9em}
#pt-root .pt-md strong{color:var(--ink)}
#pt-root .pt-md-head{display:flex;align-items:baseline;gap:0.7rem}
#pt-root .pt-md-stamp{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--ink-3);
  white-space:nowrap}
#pt-root .pt-md-note{margin:0;font-size:0.8125rem;color:var(--ink-3)}
#pt-root .pt-md-list{margin:0;padding-left:1.2rem;color:var(--ink-2)}
#pt-root .pt-md-list li{margin:0 0 0.35rem}
#pt-root .pt-md-hr{border:0;border-top:1px solid var(--line);margin:3rem 0 0}

#pt-root .pt-md-math{overflow-x:auto;overflow-y:hidden;padding:0.2rem 0;
  color:var(--ink)}
/* A math font, or the accents (bars, hats) and script letters are lost:
   the body's text font has no MATH table. `math` is the platform's own. */
#pt-root .pt-md math{font-family:math,'STIX Two Math','Cambria Math',serif;
  font-size:1.05em}
#pt-root .pt-md-pre{margin:0;background:var(--surface);border:1px solid var(--line);
  border-radius:6px;padding:1rem;overflow-x:auto;font-family:'Spline Sans Mono',ui-monospace,monospace;
  font-size:0.8125rem;line-height:1.7;color:var(--ink-2)}
/* The label and the copy button sit in the block's top padding, outside the
   <pre>, so the code a reader copies or a tool extracts is the code alone.
   Both draw their words from CSS: the label from data-label, the button's
   "Copy" and "Copied" from ::after, so no tool that reads the page's text
   picks them up as prose. */
#pt-root .pt-md-code{position:relative;min-width:0}
#pt-root .pt-md-code[data-label]::before{content:attr(data-label);position:absolute;
  top:0.6rem;left:1rem;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.625rem;letter-spacing:0.1em;
  text-transform:uppercase;color:var(--ink-3);pointer-events:none}
#pt-root .pt-md-code[data-label] > .pt-md-pre{padding-top:2.1rem}
#pt-root .pt-md-code[data-label="Output"] > .pt-md-pre{background:transparent;
  border-style:dashed}
/* Output wraps rather than scrolls. A scorecard line is one long line, and
   cut off at the box's edge it lost its last field with nothing to say the
   line went on. Code keeps its lines, and scrolls. */
#pt-root .pt-md-code[data-label="Output"] > .pt-md-pre{white-space:pre-wrap;
  overflow-wrap:break-word}
#pt-root .pt-md-copy{position:absolute;top:0.4rem;right:0.5rem;margin:0;
  padding:0.2rem 0.55rem;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.625rem;letter-spacing:0.1em;
  text-transform:uppercase;color:var(--ink-3);background:var(--card);
  border:1px solid var(--line);border-radius:4px;cursor:pointer;line-height:1.4}
#pt-root .pt-md-copy::after{content:"Copy"}
#pt-root .pt-md-copy[data-copied]::after{content:"Copied"}
#pt-root .pt-md-copy:hover{color:var(--ink);border-color:var(--accent-line)}
@media print{#pt-root .pt-md-copy{display:none}}

#pt-root .pt-md-tablebox{border:1px solid var(--line);border-radius:6px;
  background:var(--card);overflow:hidden}
/* Width and `border-collapse` come from the site's own bare `table` rule,
   which `build.TABLE_CSS` restates: the three design files that used to
   declare it are the three that moved here. */
#pt-root .pt-md-table{font-size:0.8125rem}
#pt-root .pt-md-table th{text-align:left;padding:0.6rem 0.9rem;
  font:500 0.75rem/1.3 'Public Sans',sans-serif;color:var(--ink-3);
  border-bottom:1px solid var(--line);white-space:nowrap}
#pt-root .pt-md-table td{padding:0.6rem 0.9rem;color:var(--ink-2);
  border-bottom:1px solid var(--line-soft);vertical-align:top}
#pt-root .pt-md-table tr:last-child td{border-bottom:0}
/* A value in a table cell is read whole: `model="pt-v20"` broken at its
   hyphen reads as two values. The table scrolls in its box if it has to. */
#pt-root .pt-md-table td code{white-space:nowrap}
#pt-root .pt-md-table .pt-md-right{text-align:right}
#pt-root .pt-md-table td.pt-md-right{font-family:'Spline Sans Mono',ui-monospace,monospace;
  font-variant-numeric:tabular-nums;white-space:nowrap}

#pt-root .pt-md-kv{border:1px solid var(--line);border-radius:6px;
  background:var(--card);overflow:hidden}
#pt-root .pt-md-kv-row{display:grid;
  grid-template-columns:minmax(0,max-content) minmax(0,1fr);gap:0.9rem;
  padding:0.6rem 1rem;border-bottom:1px solid var(--line-soft);align-items:baseline}
#pt-root .pt-md-kv-row:last-child{border-bottom:0}
#pt-root .pt-md-kv-key{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--accent);
  white-space:nowrap}
#pt-root .pt-md-kv-val{font-size:0.875rem;color:var(--ink-2)}

#pt-root .pt-md-cards{display:grid;
  grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1.3rem;
  align-items:stretch}
/* Four cards are two rows of two, not a row of three and one left over. */
#pt-root .pt-md-cards:has(> .pt-md-card:nth-child(4):last-child){
  grid-template-columns:repeat(2,minmax(0,1fr))}
/* An install line or a call in a card stays on one line where the card is
   wide enough to hold it; on a phone it may break, as in any paragraph. */
@media (min-width: 621px){#pt-root .pt-md-card code{white-space:nowrap}}
#pt-root .pt-md-card{border:1px solid var(--line);border-radius:6px;
  background:var(--card);padding:1.1rem 1.2rem;display:grid;
  align-content:start;gap:0.6rem}
#pt-root .pt-md-card p,#pt-root .pt-md-card .pt-md-list{font-size:0.875rem}
#pt-root .pt-md-card-accent{border-color:var(--accent-line);background:var(--accent-soft)}
#pt-root .pt-md-card-accent h3,#pt-root .pt-md-card-accent p,
#pt-root .pt-md-card-accent strong{color:var(--accent-deep)}

#pt-root .pt-md-callout{border:1px solid var(--accent-line);border-radius:6px;
  background:var(--accent-soft);padding:1rem 1.1rem;display:grid;gap:0.5rem}
#pt-root .pt-md-callout h3,#pt-root .pt-md-callout p,
#pt-root .pt-md-callout strong{color:var(--accent-deep)}
#pt-root .pt-md-callout p{font-size:0.9375rem}

#pt-root .pt-md-details{border:1px solid var(--line);border-radius:6px;
  background:var(--surface)}
#pt-root .pt-md-summary{cursor:pointer;padding:0.7rem 0.9rem;font-size:0.875rem;
  font-weight:500;color:var(--ink)}
#pt-root .pt-md-detail{padding:0 0.9rem 0.9rem;border-top:1px solid var(--line-soft);
  padding-top:0.7rem;display:grid;gap:0.5rem}
#pt-root .pt-md-detail p,#pt-root .pt-md-detail .pt-md-list{font-size:0.875rem}

#pt-root .pt-md-steps{display:grid;gap:0.9rem}
#pt-root .pt-md-step{display:flex;gap:0.7rem;align-items:flex-start}
#pt-root .pt-md-pip{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;color:var(--accent);
  border:1px solid var(--accent-line);border-radius:99px;width:1.4rem;height:1.4rem;
  display:flex;align-items:center;justify-content:center;flex:none;margin-top:2px}
#pt-root .pt-md-step-text{display:flex;flex-direction:column;gap:1px}
#pt-root .pt-md-step-head{font-size:0.875rem;font-weight:600;color:var(--ink)}
#pt-root .pt-md-step-body{font-size:0.875rem;color:var(--ink-2)}

#pt-root .pt-md-rules{display:grid;gap:0.7rem}
#pt-root .pt-md-rule{border:1px solid var(--line);border-radius:6px;
  background:var(--card);padding:1rem 1.1rem;display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:1.1rem;align-items:start}
#pt-root .pt-md-rule-head{display:grid;gap:0.4rem;min-width:0}
#pt-root .pt-md-rule p,#pt-root .pt-md-rule .pt-md-list{font-size:0.875rem}
#pt-root .pt-md-chips{display:flex;gap:0.5rem;align-items:center;flex-wrap:wrap}
#pt-root .pt-md-use{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;padding:0.2rem 0.45rem;
  border-radius:4px;background:var(--chip-bg);border:1px solid var(--chip-line);
  color:var(--green)}
#pt-root .pt-md-vs{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;color:var(--ink-3)}
#pt-root .pt-md-not{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;padding:0.2rem 0.45rem;
  border-radius:4px;background:var(--surface);border:1px solid var(--line);
  color:var(--red);text-decoration:line-through}

/* Lifted out of the markup by prerender.cjs. */
#pt-root .pt-s0{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem}
#pt-root .pt-s1{padding:0.6rem 0.9rem;border-top:1px solid var(--line-soft);vertical-align:top;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem;color:var(--accent-deep);white-space:nowrap}
#pt-root .pt-s2{padding:0.6rem 0.9rem;border-top:1px solid var(--line-soft);vertical-align:top}
#pt-root .pt-s3{color:var(--ink-2);margin:0}
#pt-root .pt-s4{font-size:0.8125rem;color:var(--ink-2)}
#pt-root .pt-s5{display:flex;gap:0.4rem;align-items:baseline;font-size:0.8125rem;color:var(--ink-2)}
#pt-root .pt-s6{display:flex;gap:0.7rem;align-items:baseline;padding:0.35rem 0;border-top:1px solid var(--line-soft)}
#pt-root .pt-s7{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.6875rem;color:var(--accent-line);flex:none}
#pt-root .pt-s8{white-space:nowrap}
#pt-root .pt-s9{font-size:1.5rem}
#pt-root .pt-s10{padding:0.6rem 0.9rem;border-top:1px solid var(--line-soft);vertical-align:top;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem;color:var(--accent-deep);white-space:pre-wrap}
#pt-root .pt-s11{padding:2.8rem 0 0;display:flex;flex-direction:column;gap:1.1rem}
#pt-root .pt-s12{margin:0;font-size:0.875rem;color:var(--ink-2)}
#pt-root .pt-s13{margin:0;background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:1rem;overflow-x:auto;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem;line-height:1.7;color:var(--ink-2)}
#pt-root .pt-s14{width:100%;table-layout:fixed;border-collapse:collapse;font-size:0.8125rem}
#pt-root .pt-s15{padding:0.6rem 0.9rem;border-top:1px solid var(--line-soft);vertical-align:top;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem;color:var(--accent-deep)}
#pt-root .pt-s16{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--accent);flex:none;min-width:8.5rem}
#pt-root .pt-s17{padding:0.6rem 0.9rem;border-top:1px solid var(--line-soft);vertical-align:top;color:var(--ink-2)}
#pt-root .pt-s18{font-size:1.0625rem;margin:0}
#pt-root .pt-s19{font-size:1.0625rem;margin:0.4rem 0 0}
#pt-root .pt-s20{text-align:left;width:13%}
#pt-root .pt-s21{color:var(--ink)}
#pt-root .pt-s22{border:1px solid var(--line);border-radius:6px;background:var(--card);padding:1.1rem 1.2rem;display:flex;flex-direction:column;gap:0.7rem}
#pt-root .pt-s23{color:var(--ink-3)}
#pt-root .pt-s24{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--accent);flex:none;min-width:37ch}
#pt-root .pt-s25{text-align:left;width:22%}
#pt-root .pt-s26{text-align:left;width:40%}
#pt-root .pt-s27{text-align:left;width:60%}
#pt-root .pt-s28{text-align:left;width:19%}
#pt-root .pt-s29{text-align:left;width:25%}
#pt-root .pt-s30{text-align:left;width:65%}
#pt-root .pt-s31{border:1px solid var(--accent-line);background:var(--accent-soft);border-radius:6px;padding:0.9rem 1.1rem}
#pt-root .pt-s32{border:1px solid var(--line);border-radius:6px;background:var(--card);padding:0.7rem 0.9rem;display:flex;flex-direction:column;gap:0.15rem}
#pt-root .pt-s33{border:1px solid var(--line);border-radius:6px;padding:0.9rem;background:var(--surface);display:flex;flex-direction:column;gap:0.5rem}
#pt-root .pt-s34{display:flex;flex-direction:column;gap:0.3rem}
#pt-root .pt-s35{display:flex;flex-direction:column;gap:0.4rem;padding-top:0.4rem}
#pt-root .pt-s36{display:flex;flex-direction:column;gap:0.5rem;padding-top:0.6rem}
#pt-root .pt-s37{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--accent);flex:none;width:38ch}
#pt-root .pt-s38{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--ink-3)}
#pt-root .pt-s39{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:1.25rem;color:var(--accent-deep)}
#pt-root .pt-s40{font-size:1.0625rem;margin:0;font-family:'Spline Sans Mono',ui-monospace,monospace;color:var(--accent-deep)}
#pt-root .pt-s41{margin:0;font-size:0.875rem;color:var(--accent-deep)}
#pt-root .pt-s42{margin:0;font-size:0.9375rem;font-family:'Public Sans',sans-serif;font-weight:600}
#pt-root .pt-s43{padding:0.6rem 0.9rem;border-top:1px solid var(--line-soft);vertical-align:top;font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.8125rem;color:var(--ink-3);word-break:break-word}
#pt-root .pt-s44{padding:2.4rem 0 0;display:flex;flex-direction:column;gap:0.9rem}
#pt-root .pt-s45{text-align:left;width:43%}
#pt-root .pt-s46{color:var(--accent)}
#pt-root .pt-s47{font-size:1.125rem;color:var(--ink-2);margin:0}
#pt-root .pt-s48{max-width:1040px;margin:0 auto;padding:0 1.5rem}
#pt-root .pt-s49{font-family:'Spline Sans Mono',ui-monospace,monospace;font-size:0.75rem;color:var(--accent);flex:none;min-width:36ch}
#pt-root .pt-s50{font-size:clamp(1.8rem,3vw,2.1rem)}

body.pt-front{line-height:1.6}
body.pt-front p{margin:0 0 0.85rem}
body.pt-front h1,body.pt-front h2,body.pt-front h3{line-height:1.12}

.pt-dark{display:none !important}
:root{color-scheme:light}
#pt-search-open[hidden]{display:none}
.pt-scroll{overflow-x:auto;max-width:100%}

table{border-collapse:collapse;width:100%}
#pt-root .pt-tablebox{border:1px solid var(--line);border-radius:6px;background:var(--card)}
#pt-root .pt-tablebox th{padding:0.6rem 0.9rem;font:500 0.75rem/1.3 'Public Sans',sans-serif;
  color:var(--ink-3);border-bottom:1px solid var(--line);vertical-align:bottom}

@media (max-width: 620px){
  .pt-door-name{white-space:normal !important}
  /* The control rows above the charts are flex rows that do not wrap. At
     a phone's width a row of a label, a number and a slider is wider than
     the screen, and because nothing between it and the body scrolls, the
     page scrolls. Wrapping is what the design does with the masthead nav
     at the same size; these rows were simply never given the same rule.
     Wrapping is applied to rows only. A column flex container told to
     wrap starts a second column instead of a second line, which widens
     the very thing it was meant to narrow.

     Two ways to be a column, because there are two ways the direction is
     written. The design writes its layout inline, so a style light enough
     to stay inline is read from the attribute; a repeated one is lifted
     into a class by prerender.cjs, which deletes the attribute and marks
     the element `pt-col` on the way past. Reading only the attribute is
     how every lifted column on the site came to match this rule. */
  #pt-root div:not(.pt-col):not([style*="flex-direction:column"]){flex-wrap:wrap}
  /* A grid or flex item will not shrink below its content unless told to,
     which is what keeps a code block or a table from fitting even inside a
     box that scrolls. */
  #pt-root *{min-width:0}
  #pt-root input[type="range"]{max-width:100%}
  /* Every design file narrows a label/value row with
     `main div > span:first-child{width:auto !important}`. A numbered
     step pip is also a first-child span in a div, and losing its width
     leaves a 9px sliver where a circle should be. Named rather than
     out-specified, because the wildcard is right about the rows. */
  #pt-root [data-pip]{width:1.4rem !important}
  /* And the row that holds one must not wrap, or the number lands on
     its own line above the step it numbers. The wrap rule above is
     for control rows; the text beside a pip already shrinks, because
     of the min-width rule below. */
  #pt-root div:has(> [data-pip]){flex-wrap:nowrap}
  /* The same first-child span again. A signature row writes the name
     `flex:none`, which sizes it to its content and refuses to give any
     of it back, so `shock(target, *, operation="multiply", value=None,
     at=0, duration=None, shape=None)` was 597px wide on a 390px screen
     and the scenario API page scrolled sideways. Shrinking lets it wrap
     at its own spaces. The pip is excluded because it is the one
     first-child span whose width is the point. */
  #pt-root div > span:first-child:not([data-pip]){flex-shrink:1}
  /* The API tables are `table-layout:fixed` with percentage columns, and a
     fixed column cannot shrink a cell below the width of the token in it,
     so at a phone's width a member name is drawn straight across the next
     column. Automatic layout sizes each column from its content, and a
     table that is then wider than the screen scrolls inside the box it is
     already in, which is what the box is for. Left at that, the prose
     column is the one squeezed, down to a word a line; the floor keeps it
     readable and the scroll box takes the rest. `pt-fixed` is the marker
     prerender.cjs leaves when it lifts the style into a class, and the
     attribute form covers a table whose style was not lifted. */
  #pt-root table.pt-fixed, #pt-root table[style*="table-layout:fixed"]{table-layout:auto}
  #pt-root table.pt-fixed td:last-child,
  #pt-root table[style*="table-layout:fixed"] td:last-child{min-width:12rem}
  /* Inline code in prose has no spaces to break at, so a long call such
     as `AdapterInfo(instructions_digest=digest(PROMPT))` or a path under
     validation/pt-v20/ pushed the page sideways. It may break anywhere on
     a phone. */
  #pt-root p code, #pt-root li code{overflow-wrap:anywhere}
  /* An inline formula cannot break either, and MathML gives it no place
     to. One wider than the column scrolls inside its own box, as a
     displayed formula does in .pt-md-math. */
  #pt-root .pt-md math:not([display="block"]){display:inline-block;
    max-width:100%;overflow-x:auto;overflow-y:hidden;vertical-align:middle}
}
/* Every table is already inside a scroll box, so a column header has
   somewhere to go sideways. Left to wrap it instead grows the row twice as
   tall and breaks two-word headers ("daily return") down the middle, which
   is the one thing a header must not do. Scrolling is the intended
   behaviour of the box the table is in. */
#pt-root th{white-space:nowrap}
/* Where a heading is a whole sentence and cannot hold one line at a phone's
   width, break it evenly rather than leaving one word alone on the second
   line. */
@media (max-width: 620px){
  #pt-root h1, #pt-root h2, #pt-root h3, #pt-root summary{text-wrap:balance}
}

@media print{
  @page{margin:0.5cm}
  html,body{background:#fff}
  /* !important throughout, because everything being overridden here is set
     by a class or an inline style, either of which outranks a bare element
     selector. A print rule that loses is a print rule that is not there. */
  *{print-color-adjust:exact !important;-webkit-print-color-adjust:exact !important;
    backdrop-filter:none !important}
  .pt-head{position:static !important}
  .pt-side,.pt-toc,.pt-toc-m,.pt-mnav,.pt-actions,.pt-skip,.pt-peer,
  #pt-search-open,#pt-theme,#pt-search{display:none !important}
  .pt-layout{display:block !important}
  #pt-root{height:auto !important}
  figure,table,pre,details{break-inside:avoid}
  h1,h2,h3{break-after:avoid}
  a{text-decoration:none;color:inherit}
}
