/* planex2d.org's header on the docs pages (_templates/layout.html): the site's menu bar in the site's look, its
   shared style scoped to .pxs so that it leaves the docs theme alone; light only, as the docs. The fonts come from the
   site (/assets/fonts, cached with its other pages), else from the docs' own copy (site-fonts/, with their licenses),
   so the bar looks the same wherever the docs are served. */
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:100 700;font-display:swap;src:url(/assets/fonts/ibm-plex-sans-variable.woff2) format("woff2"),url(site-fonts/ibm-plex-sans-variable.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url(/assets/fonts/ibm-plex-mono-500.woff2) format("woff2"),url(site-fonts/ibm-plex-mono-500.woff2) format("woff2")}
@font-face{font-family:"Newsreader";font-style:normal;font-weight:200 800;font-display:swap;src:url(/assets/fonts/newsreader-variable.woff2) format("woff2"),url(site-fonts/newsreader-variable.woff2) format("woff2")}

.pxs{
  --paper:#f2f3f5;--sheet:#fff;--sheet-2:#f7f8fa;--hair:#dcdfe5;--hair-strong:#c3c8d1;--ink:#1b222d;--ink-muted:#545c6a;
  --ink-label:#5f6775;--accent:#cc66be;--accent-ink:#ac399c;--mark-edge:#1b222d;
  --font-display:"Newsreader","Iowan Old Style",Georgia,serif;
  --font-sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --lift-pop:0 1px 2px rgb(27 34 45 / .08),0 16px 40px -12px rgb(27 34 45 / .28);
  --header-h:64px;
  position:fixed;top:0;left:0;right:0;z-index:300;
  color:var(--ink);font:400 16.5px/1.65 var(--font-sans);-webkit-font-smoothing:antialiased;
}
.pxs *,.pxs *::before,.pxs *::after{box-sizing:border-box}
.pxs svg{display:block;max-width:100%}
.pxs ul{margin:0;padding:0;list-style:none}
.pxs .site-header{background:rgb(242 243 245 / .92);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--hair-strong)}
.pxs .container{width:100%;max-width:1200px;margin-inline:auto;padding-inline:24px}
.pxs .header-inner{display:flex;align-items:center;gap:36px;height:var(--header-h)}
.pxs .brand{display:inline-flex;align-items:center;gap:10px;text-decoration:none;flex:none}
.pxs .brand-mark{width:30px;height:30px}
.pxs .brand-wordmark{height:21px;width:auto}
.pxs .edge{stroke:var(--mark-edge)}
.pxs .wm-plan{fill:var(--ink)}
.pxs .wm-ex2d{fill:#cc66be}
.pxs .icon{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.pxs .btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:1px solid transparent;border-radius:5px;background:transparent;color:var(--ink-muted);cursor:pointer}
.pxs .btn:hover{background:rgb(27 34 45 / .06);color:var(--ink)}
.pxs .nav{display:flex;align-items:center;gap:4px;flex:1}
.pxs .nav-list{display:flex;align-items:center;gap:2px}
.pxs .nav-link{position:relative;display:inline-flex;align-items:center;gap:4px;height:40px;padding:0 12px;border:0;border-radius:5px;background:none;color:var(--ink-muted);font:500 15px/1 var(--font-sans);text-decoration:none;cursor:pointer}
.pxs .nav-link:hover,.pxs .nav-link:visited:hover,.pxs .nav-link.is-current{color:var(--ink)}
.pxs .nav-link:visited{color:var(--ink-muted)}
.pxs .nav-link.is-current::after{content:"";position:absolute;left:50%;bottom:-17px;width:9px;height:9px;margin-left:-12.5px;border-radius:50%;border:1.5px solid var(--accent);background:var(--paper)}
.pxs .nav-link .chev{width:15px;height:15px}
.pxs .nav-link[aria-expanded="true"] .chev{transform:rotate(180deg)}
.pxs .nav-group-label{display:none}
.pxs .has-menu{position:relative}
.pxs .menu{position:absolute;top:calc(100% + 14px);left:-12px;width:380px;margin:0;padding:6px;background:var(--sheet);border:1px solid var(--hair);border-radius:6px;box-shadow:var(--lift-pop)}
.pxs .menu.is-hidden{display:none}
.pxs .menu-item,.pxs .menu-item:visited{display:grid;grid-template-columns:30px 1fr;gap:1px 10px;align-items:baseline;padding:11px 12px;border-radius:4px;text-decoration:none;color:var(--ink)}
.pxs .menu-item:hover{background:var(--sheet-2);color:var(--ink)}
.pxs .menu-no{grid-row:span 2;font:500 12px/1 var(--font-mono);color:var(--accent-ink);letter-spacing:.04em;padding-top:3px}
.pxs .menu-title{font-family:var(--font-display);font-size:19px;line-height:1.2;font-weight:450}
.pxs .menu-desc{font-size:13.5px;line-height:1.4;color:var(--ink-muted)}
.pxs .menu-foot{margin:6px -6px -6px;padding:10px 18px;border-top:1px solid var(--hair);background:var(--sheet-2);border-radius:0 0 6px 6px;font:500 11.5px/1.2 var(--font-mono);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-label)}
.pxs .menu-toggle{display:none;margin-left:auto}
.pxs .menu-toggle .i-close{display:none}
.pxs .site-header.is-open .menu-toggle .i-menu{display:none}
.pxs .site-header.is-open .menu-toggle .i-close{display:block}
@media (max-width:860px){
  .pxs .container{padding-inline:16px}
  .pxs .header-inner{gap:12px}
  .pxs .menu-toggle{display:inline-flex}
  .pxs .nav{position:absolute;top:var(--header-h);left:0;right:0;display:none;flex-direction:column;align-items:stretch;gap:0;padding:8px 16px 20px;background:var(--paper);border-bottom:1px solid var(--hair-strong);box-shadow:var(--lift-pop);max-height:calc(100vh - var(--header-h));max-height:calc(100dvh - var(--header-h));overflow-y:auto;overscroll-behavior:contain}
  .pxs .site-header.is-open .nav{display:flex}
  .pxs .nav-list{flex-direction:column;align-items:stretch}
  .pxs .nav-link{width:100%;height:50px;font-size:17px}
  .pxs .nav-link.is-current::after{display:none}
  .pxs .has-menu>.nav-link{justify-content:space-between}
  .pxs .menu{position:static;width:auto;padding:0 0 6px 12px;border:0;box-shadow:none;background:none}
  .pxs .menu-foot{display:none}
}

/* the docs theme under the fixed header: its page (an absolutely placed grid one screen high, so a sticky header would
   leave with it), its sidebar and, on phones, the content beside the open sidebar start below the header; a link to a
   heading stops below it */
html{scroll-padding-top:72px}
.wy-grid-for-nav{top:64px}
/* the header carries the logo, so the theme's own home link goes: atop the sidebar (its search box stays) and in its
   bar on phones (its sidebar button stays) */
.wy-side-nav-search>a.icon-home,.wy-nav-top>a{display:none}
.wy-nav-side{top:64px;bottom:0;min-height:0}
@media screen and (max-width:768px){
  .wy-nav-content-wrap.shift{top:64px;height:calc(100% - 64px)}
}
