/* ==========================================================================
   A8 Core™ developer docs stylesheet
   Single source of truth. Never embed styles in a page.
   Install once: Customize, Additional CSS. Or a child-theme stylesheet.
   ========================================================================== */

/* --- nav reconciliation --- */
html,body{overflow-x:clip !important;}
html{scroll-padding-top:84px;}
header.nav{position:sticky !important;top:0 !important;z-index:60;}
body.admin-bar header.nav{top:32px !important;}
@media screen and (max-width:782px){body.admin-bar header.nav{top:46px !important;}}
header.nav a, header.nav .nav-dd-menu a, .ribbon a, footer.ft a, a.btn, a.btn-pri, .ccard{text-decoration:none !important;}
header.nav .nav-links{align-items:center !important;}
header.nav .nav-links > a{display:inline-flex !important;align-items:center !important;line-height:1.6 !important;font-size:.88rem !important;font-weight:500 !important;}
header.nav .nav-dd{display:inline-flex !important;align-items:center !important;}
header.nav .nav-dd-t{display:inline-flex !important;align-items:center !important;font-family:inherit !important;font-size:.88rem !important;font-weight:500 !important;line-height:1.6 !important;letter-spacing:inherit !important;color:inherit !important;gap:4px !important;padding:0 !important;background:none !important;border:0 !important;cursor:pointer !important;}
header.nav .nav-dd-menu{left:0 !important;right:auto !important;transform:translateY(6px) !important;}
header.nav .nav-links > .nav-dd:last-child .nav-dd-menu{left:auto !important;right:0 !important;}
@media(max-width:760px){.nav-links.open{max-height:calc(100dvh - 64px);overflow-y:auto;-webkit-overflow-scrolling:touch;}}

/* --- tokens, layout, components --- */
:root{--verd-fill:#38A98F;--crit-bg:#2A1016;--warn-bg:#2E1C0E;--verd:#6FC3AE;--verd-bright:#8FD6C3;--verd-deep:#2F8B76;--verd-dark:#1F8A72;--verd-glow:rgba(111,195,174,.18);--ledger-950:#060E14;--ledger-900:#0B1620;--ledger-850:#0E1C26;--ledger-800:#12232E;--ok:#34E0A6;--pending:#E0B04A;--warn:#FFB37A;--crit:#FF9AA5;--info:var(--verd);
    --ink-950:#060E14;--ink-900:#0B1620;--ink-800:#12232E;--surface:#162A36;
    --line:#1E3846;--line-soft:#172B36;
    --blue:#6FC3AE;--blue-bright:#8FD6C3;--blue-deep:#2F8B76;
    --mint:#34e0a6;--mint-dim:#1f8f6a;--amber:#e0b04a;
    --txt:#e8eefb;--txt-2:#aebbd4;--txt-3:#7385a3;
    --disp:"Sora",system-ui,sans-serif;--body:"Inter",system-ui,sans-serif;--mono:"JetBrains Mono",ui-monospace,monospace;
    --sb:262px;--gut:clamp(20px,4vw,48px);
  }
  *{box-sizing:border-box;}
  html{scroll-behavior:smooth;}
  body{margin:0;background:var(--ink-900);color:var(--txt-2);font-family:var(--body);line-height:1.65;-webkit-font-smoothing:antialiased;}
  a{color:inherit;text-decoration:none;}
  h1,h2,h3,h4{font-family:var(--disp);color:#fff;letter-spacing:-.02em;line-height:1.12;margin:0;}
  code{font-family:var(--mono);font-size:.86em;}
  .mono{font-family:var(--mono);}

  /* top bar */
  .top{position:sticky;top:0;z-index:50;height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 var(--gut);background:rgba(6,14,20,.86);backdrop-filter:blur(10px);border-bottom:1px solid var(--line-soft);}
  .brand{display:flex;align-items:center;gap:.6em;}
  .brand-logo{height:34px;width:auto;display:block;}
  .bmark{width:27px;height:27px;border-radius:6px;background:linear-gradient(150deg,var(--blue),var(--blue-deep));display:grid;place-items:center;}
  .bmark svg{width:15px;height:15px;}
  .btxt{font-family:var(--disp);font-weight:700;font-size:.9rem;color:#fff;}
  .btxt small{display:block;font-family:var(--mono);font-weight:400;font-size:.56rem;letter-spacing:.16em;color:var(--txt-3);text-transform:uppercase;}
  .top-r{display:flex;align-items:center;gap:1.4rem;}
  .top-r a{font-size:.85rem;font-weight:500;color:var(--txt-2);}
  .top-r a:hover{color:#fff;}
  .top-r .pill{border:1px solid var(--line);border-radius:6px;padding:.45em 1em;color:#fff;}
  .top-r .pill:hover{border-color:var(--blue);}

  /* layout */
  .shell{display:grid;grid-template-columns:var(--sb) 1fr;max-width:1240px;margin:0 auto;}
  aside{position:sticky;top:58px;align-self:start;height:calc(100vh - 58px);overflow-y:auto;border-right:1px solid var(--line-soft);padding:30px 20px 60px var(--gut);}
  .sb-group{margin-bottom:26px;}
  .sb-group h4{font-family:var(--mono);font-weight:500;font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:var(--txt-3);margin-bottom:.9em;}
  .sb-group a{display:block;font-size:.88rem;color:var(--txt-2);padding:.32em 0;border-left:2px solid transparent;padding-left:12px;margin-left:-12px;transition:color .15s,border-color .15s;}
  .sb-group a:hover{color:#fff;}
  .sb-group a.active{color:var(--blue-bright);border-color:var(--blue);font-weight:600;}
  .sb-group a.soon{color:var(--txt-3);cursor:default;}
  .sb-group a.soon::after{content:"soon";font-family:var(--mono);font-size:.56rem;letter-spacing:.1em;color:var(--txt-3);border:1px solid var(--line-soft);border-radius:4px;padding:.05em .4em;margin-left:.6em;vertical-align:1px;}
  .sb-method{font-family:var(--mono);font-size:.6rem;font-weight:600;color:var(--mint);margin-right:.5em;}

  main{padding:44px var(--gut) 100px;max-width:880px;}
  section{padding-top:36px;margin-top:24px;border-top:1px solid var(--line-soft);}
  section:first-child{border-top:0;margin-top:0;padding-top:0;}
  .eyebrow{font-family:var(--mono);font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);}
  h1{font-size:clamp(1.9rem,3.6vw,2.5rem);font-weight:700;margin:.4em 0 .5em;}
  h2{font-size:1.6rem;font-weight:600;margin-bottom:.6em;}
  h3{font-size:1.04rem;font-weight:600;margin:1.8em 0 .7em;}
  p{margin:0 0 1em;}
  p a{color:var(--blue-bright);}p a:hover{text-decoration:underline;}
  .lead{font-size:1.08rem;color:var(--txt-2);}

  .endpoint{display:flex;align-items:center;gap:.7em;flex-wrap:wrap;border:1px solid var(--line);border-radius:9px;background:var(--ink-950);padding:12px 14px;font-family:var(--mono);font-size:.86rem;margin:0 0 1.4em;}
  .verb{font-weight:600;color:var(--ledger-950);background:var(--mint);border-radius:5px;padding:.18em .6em;font-size:.8rem;letter-spacing:.02em;}
  .path{color:#fff;}
  .op{margin-left:auto;color:var(--txt-3);font-size:.78rem;}

  table{width:100%;border-collapse:collapse;margin:0 0 1.4em;font-size:.88rem;}
  th,td{text-align:left;padding:11px 12px;border-bottom:1px solid var(--line-soft);vertical-align:top;}
  th{font-family:var(--mono);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:var(--txt-3);font-weight:500;background:var(--ink-950);}
  td:first-child{font-family:var(--mono);font-size:.82rem;color:var(--blue-bright);white-space:nowrap;}
  td .ty{font-family:var(--mono);font-size:.8rem;color:var(--amber);}
  .req{font-family:var(--mono);font-size:.68rem;color:var(--mint);border:1px solid var(--mint-dim);border-radius:4px;padding:.12em .45em;}
  .opt{font-family:var(--mono);font-size:.68rem;color:var(--txt-3);border:1px solid var(--line);border-radius:4px;padding:.12em .45em;}

  .code{border:1px solid var(--line);border-radius:10px;background:var(--ink-950);overflow:hidden;margin:0 0 1.4em;}
  .code-h{display:flex;align-items:center;gap:.5em;padding:9px 13px;border-bottom:1px solid var(--line-soft);background:var(--ledger-950);font-family:var(--mono);font-size:.7rem;color:var(--txt-3);}
  .code-h .tl{width:9px;height:9px;border-radius:50%;background:var(--line);}
  .code-h b{margin-left:.5em;color:var(--txt-2);font-weight:500;}
  .code pre{margin:0;padding:15px 16px;font-family:var(--mono);font-size:.8rem;line-height:1.7;color:var(--txt);overflow-x:auto;}
  .c-com{color:var(--txt-3);}.c-verb{color:var(--blue-bright);}.c-key{color:var(--verd);}.c-str{color:var(--txt);}.c-num{color:var(--amber);}.c-ok{color:var(--mint);}

  .enum{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 1.4em;}
  .enum span{font-family:var(--mono);font-size:.78rem;color:var(--txt);border:1px solid var(--line);border-radius:6px;padding:.34em .7em;background:var(--ink-950);}
  .enum span em{font-style:normal;color:var(--txt-3);}

  .note{display:flex;gap:.8em;border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:8px;background:#0c1426;padding:14px 16px;margin:0 0 1.4em;font-size:.9rem;color:var(--txt-2);}
  .note svg{flex:none;width:18px;height:18px;color:var(--blue);margin-top:2px;}
  .note.warn{border-left-color:var(--amber);}
  .note.warn svg{color:var(--amber);}

  .statusrow{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 1.4em;}
  .statusrow .st{border:1px solid var(--line-soft);border-radius:8px;background:var(--surface);padding:12px 16px;font-size:.86rem;}
  .statusrow .st b{font-family:var(--mono);color:#fff;}
  .statusrow .st.pass b{color:var(--mint);}
  .statusrow .st.fail b{color:#ff7a7a;}

  footer{max-width:880px;margin:0 auto;padding:30px var(--gut) 50px;border-top:1px solid var(--line-soft);font-size:.78rem;color:var(--txt-3);}
  footer a{color:var(--txt-2);}

  .menu-btn{display:none;background:none;border:1px solid var(--line);border-radius:6px;color:#fff;cursor:pointer;padding:.4em .7em;font-size:.8rem;}

  @media (max-width:880px){
    .shell{grid-template-columns:1fr;}
    aside{display:none;position:fixed;top:58px;left:0;right:0;height:auto;max-height:70vh;background:var(--ink-950);z-index:40;border-right:0;border-bottom:1px solid var(--line);}
    aside.open{display:block;}
    .menu-btn{display:inline-block;}
    .top-r a.hidesm{display:none;}
  }

  .ribbon{background:var(--ink-950);border-bottom:1px solid var(--line-soft);font-family:var(--mono);font-size:.7rem;color:var(--txt-3);letter-spacing:.04em;}
  .ribbon .wrap{display:flex;align-items:center;gap:.6em;height:34px;max-width:1200px;margin:0 auto;padding-inline:var(--gut,24px);}
  .ribbon b{color:var(--txt-2);font-weight:500;}
  .ribbon .dot{width:7px;height:7px;border-radius:50%;background:var(--mint);animation:pulse 2.4s infinite;}
  .ribbon .sep{color:var(--line);}
  @keyframes pulse{0%{box-shadow:0 0 0 0 rgba(52,224,166,.5);}70%{box-shadow:0 0 0 7px rgba(52,224,166,0);}100%{box-shadow:0 0 0 0 rgba(52,224,166,0);}}
  @media(max-width:640px){.ribbon .hide-sm{display:none;}}

/* --- docs bar and sidebar beneath the marketing nav --- */
/* api-reference — reconcile docs bar + sidebar beneath the marketing nav */
.top{top:66px !important;z-index:50;}
aside{top:126px !important;height:calc(100vh - 126px) !important;padding-top:24px !important;}
header.nav .menu-btn{display:none;}@media(max-width:760px){header.nav .menu-btn{display:flex;}}
.docs-label{font-family:var(--disp);color:#fff;font-weight:600;font-size:.98rem;letter-spacing:-.01em;}
.docs-label em{color:var(--txt-3);font-style:normal;font-family:var(--mono);font-size:.74rem;margin-left:.35em;}
/* sidebar beautify */
.sb-group{margin-bottom:20px;}
.sb-group h4{font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;color:var(--txt-3);margin:0 0 8px;font-family:var(--mono);font-weight:600;}
#sidebar .sb-group a,aside .sb-group a{display:flex;align-items:center;gap:.5em;border-left:0 !important;margin-left:0 !important;padding:.44em 10px !important;border-radius:7px;transition:background .14s,color .14s;}
.sb-group a:hover{background:rgba(111,195,174,.08);color:var(--txt);}
.sb-group a.active{background:rgba(111,195,174,.14);color:var(--blue-bright);box-shadow:inset 2px 0 0 var(--blue);}
.sb-method{display:inline-block;min-width:40px;text-align:center;padding:1px 5px;border-radius:4px;font-size:.58rem;font-weight:700;letter-spacing:.03em;margin-right:.2em !important;background:rgba(52,224,166,.12);color:var(--mint);}
.sb-method[data-m="POST"]{background:rgba(52,224,166,.14);color:var(--mint);}
.sb-method[data-m="GET"]{background:rgba(111,195,174,.16);color:var(--blue-bright);}
.sb-method[data-m="PATCH"]{background:rgba(224,176,74,.16);color:var(--amber);}
.sb-method[data-m="DELETE"]{background:rgba(255,120,120,.16);color:#ff8e8e;}
.soon{color:var(--txt-3);}.soon .sb-method{background:rgba(115,133,163,.14);color:var(--txt-3);}

/* --- admin-bar offsets --- */
html{scroll-padding-top:140px !important;}body.admin-bar .top{top:98px !important;}body.admin-bar aside{top:158px !important;height:calc(100vh - 158px) !important;}

/* --- account types, asset classes, eligibility matrix --- */
/* --- account types + asset classes (generated companion CSS) ------- */
  .natdesc{color:var(--txt-3);font-size:.88rem;margin:-.3em 0 .8em;}
  .enum span b{font-family:var(--mono);font-weight:600;color:var(--blue-bright);}
  .enum span em{font-style:normal;color:var(--txt-3);}
  .enum span i{font-style:normal;font-family:var(--mono);font-size:.54rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ledger-950);background:var(--amber);border-radius:3px;padding:.1em .32em;margin-left:.55em;vertical-align:1px;}
  .enum span i.x{background:var(--txt-3);color:var(--ink-950);}
  .enum span.gated{border-color:rgba(224,176,74,.42);}
  .enum span.off{border-color:var(--line-soft);}
  .enum span.off b{color:var(--txt-3);}
  .legend{display:flex;flex-wrap:wrap;gap:1.3rem;font-size:.84rem;color:var(--txt-2);margin:0 0 1.2em;}
  .legend i{font-style:normal;margin-right:.45em;font-size:1rem;line-height:1;}
  .legend i.p{color:var(--mint);}.legend i.c{color:var(--blue-bright);}
  .legend i.n{color:var(--txt-3);}.legend i.x{color:var(--txt-3);}
  .mx-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;margin:0 0 1.4em;}
  .mx-wrap:focus-visible{outline:2px solid var(--blue);outline-offset:2px;}
  .mx{width:100%;min-width:900px;border-collapse:collapse;font-size:.82rem;margin:0;}
  .mx caption{caption-side:top;text-align:left;padding:11px 14px;font-size:.76rem;color:var(--txt-3);border-bottom:1px solid var(--line-soft);}
  .mx thead th{text-align:center;white-space:nowrap;font-size:.58rem;letter-spacing:.08em;vertical-align:bottom;line-height:1.35;}
  .mx thead th:first-child{text-align:left;}
  .mx tbody th{position:sticky;left:0;z-index:1;background:var(--ink-900);border-right:1px solid var(--line-soft);text-align:left;white-space:nowrap;padding-left:14px;font-family:var(--body);font-size:.82rem;font-weight:500;letter-spacing:0;text-transform:none;color:var(--txt);}
  .mx tbody th small{display:block;font-family:var(--mono);font-size:.58rem;letter-spacing:.04em;color:var(--txt-3);margin-top:3px;}
  .mx td{text-align:center;font-size:1rem;line-height:1;}
  .mx td.p{color:var(--mint);}
  .mx td.c{color:var(--blue-bright);}
  .mx td.n{color:var(--txt-3);}
  .mx td.x{color:var(--txt-3);}
  .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}
  .cond{font-family:var(--mono);font-size:.68rem;color:var(--amber);border:1px solid rgba(224,176,74,.5);border-radius:4px;padding:.12em .45em;}

/* --- directory, leaf pages, collapsible sidebar --- */
.toc{display:flex;flex-wrap:wrap;gap:.5em 1.4em;border:1px solid var(--line);border-radius:9px;background:var(--ink-950);padding:12px 16px;margin:0 0 1.6em;font-size:.84rem;}
.toc b{font-family:var(--mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--txt-3);font-weight:600;margin-right:.4em;}
.toc a{color:var(--txt-2);}.toc a:hover{color:var(--blue-bright);}
.kv{width:100%;border-collapse:collapse;font-size:.86rem;margin:0 0 1.6em;}
.kv th{width:34%;text-align:left;font-family:var(--mono);font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--txt-3);font-weight:500;background:var(--ink-950);vertical-align:top;}
.kv td{color:var(--txt);}
.dir{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:8px;margin:0 0 1.5em;}
.dir a{display:block;border:1px solid var(--line);border-radius:8px;background:var(--ink-950);padding:11px 13px;transition:border-color .14s,background .14s;}
.dir a:hover{border-color:var(--blue-deep);background:#0c1426;}
.dir b{display:block;font-family:var(--mono);font-size:.78rem;font-weight:600;color:var(--blue-bright);}
.dir em{display:block;font-style:normal;font-size:.78rem;color:var(--txt-3);margin-top:2px;}
.dir a.gated{border-color:rgba(224,176,74,.35);}
.dir a.gated b{color:var(--amber);}
.dir a.off{border-color:var(--line-soft);}.dir a.off b{color:var(--txt-3);}
.tag{font-family:var(--mono);font-size:.54rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ledger-950);background:var(--amber);border-radius:3px;padding:.1em .32em;margin-left:.5em;vertical-align:1px;}
.tag.x{background:var(--txt-3);color:var(--ink-950);}
.pager{display:flex;justify-content:space-between;gap:1em;border-top:1px solid var(--line-soft);padding-top:1.4em;margin-top:2.4em;font-size:.86rem;}
.pager a{color:var(--txt-2);}.pager a:hover{color:var(--blue-bright);}
aside details{margin:0 0 4px;}
aside details summary{list-style:none;cursor:pointer;font-size:.84rem;color:var(--txt-2);padding:.4em 10px;border-radius:7px;}
aside details summary::-webkit-details-marker{display:none;}
aside details summary::before{content:'\25B8';display:inline-block;width:1em;color:var(--txt-3);transition:transform .15s;}
aside details[open] summary::before{transform:rotate(90deg);}
aside details summary:hover{background:rgba(111,195,174,.08);color:var(--txt);}
/* Sidebar hierarchy.  The aside carries id="sidebar", so
   `#sidebar .sb-group a` (1,1,1) out-specifies `aside details .sb-sub a`
   (0,1,3) even though both are !important -- its `padding:.44em 10px`
   shorthand was overriding the leaf indent.  Re-assert it with the id, and
   hang the indent on .sb-sub so it compounds if the tree ever nests deeper. */
#sidebar details .sb-sub,
aside details .sb-sub{margin-left:16px;border-left:1px solid var(--line);}
#sidebar details .sb-sub a,
aside details .sb-sub a{font-size:.8rem;padding-left:18px !important;font-family:var(--mono);}

/* ==== A8 Core canonical component layer =================================
   One card system, one button system, one focus treatment.
   Hover is gated to real hover devices; keyboard parity via :focus-within.
   Informational cards get the affordance but never cursor:pointer.
   ====================================================================== */
:root{ --card-line:var(--line-soft); --card-line-hover:var(--verd); --card-t:.2s; }

.a8-card,
.card,.cap,.ep,.ctrl,.pillar,.acard,.wcard,.acell,.kpi,.help-cta,.help-cta2,
.uof,.ipcard,.aside-card,.atype,.boiler,.cert,.cinfo,.dr-card,.roles,
.sched-card,.toc,.doc,.acct-note,.cform-wrap,.status-banner,.arch-strip{
  transition:border-color var(--card-t) ease, background-color var(--card-t) ease;
}
@media (hover:hover) and (pointer:fine){
  .a8-card:hover,
  .card:hover,.cap:hover,.ep:hover,.ctrl:hover,.kpi:hover,.help-cta:hover,
  .help-cta2:hover,.cform-wrap:hover{ border-color:var(--card-line-hover); }
}
.a8-card:focus-within,
.card:focus-within,.cap:focus-within,.ep:focus-within,.ctrl:focus-within,
.kpi:focus-within,.help-cta:focus-within,.cform-wrap:focus-within{
  border-color:var(--card-line-hover);
}

/* buttons — single system */
.btn{font-family:var(--body);font-weight:600;border-radius:10px;
     transition:background-color .18s ease,border-color .18s ease,color .18s ease;}
.btn-pri{background:var(--verd);color:var(--ledger-950);border:1px solid var(--verd);}
.btn-pri:hover{background:var(--verd-bright);color:var(--ledger-950);}
.btn-pri:active{background:var(--verd-deep);color:var(--txt);}
.btn-ghost{background:transparent;color:var(--verd);border:1px solid var(--line);}
.btn-ghost:hover{border-color:var(--verd);color:var(--verd-bright);}
.btn-ghost:active{border-color:var(--verd-bright);}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed;}

/* focus — one ring everywhere */
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,
select:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--verd-bright);outline-offset:2px;
}

/* forms */
.field input,.field textarea,.field select{
  background:var(--ledger-950);border:1px solid var(--line);color:var(--txt);
  transition:border-color .18s ease,box-shadow .18s ease;
}
.field input::placeholder,.field textarea::placeholder{color:var(--txt-3);}
.field input:focus,.field textarea:focus,.field select:focus{
  outline:none;border-color:var(--verd);box-shadow:0 0 0 3px var(--verd-glow);
}
.field .err,.field [aria-invalid="true"]{border-color:var(--crit);}
.field .req{color:var(--verd);}

@media (prefers-reduced-motion:reduce){
  .a8-card,.card,.cap,.ep,.ctrl,.kpi,.help-cta,.btn{transition:none;}
}
/* ==== end canonical component layer =================================== */


/* ==== Primary button — filled-control ramp ============================
   rest  #38A98F  6.30:1 on ground · ink 6.70:1
   hover #6FC3AE  8.78:1 · ink 9.34:1
   press #2F8B76  4.41:1 · ink 4.70:1
   --verd stays the ACCENT (links, focus, card hover, wordmark).
   ==================================================================== */
.btn-pri{background:var(--verd-fill);color:var(--ledger-950);border:1px solid var(--verd-fill);}
.btn-pri:hover{background:var(--verd);color:var(--ledger-950);border-color:var(--verd);}
.btn-pri:active{background:var(--verd-deep);color:var(--ledger-950);border-color:var(--verd-deep);}
/* ==== end primary button ============================================= */


/* ==== Code panels — defensive integration override =====================
   Critical background/colour pairs are literal, not tokens, so a missing
   variable or a theme rule can never leave light text on a white well.
   Measured on #060E14: default 10.05:1 · string 16.71:1 · keyword 9.34:1
   · number 9.70:1 · comment 5.19:1 · verb 11.64:1 — all AA or better.
   ===================================================================== */
html body .code,
html body .sc,
html body pre{
  background:#060E14 !important;
  color:#AEBBD4 !important;
  border-color:#1E3846 !important;
}
html body .code pre,
html body .sc pre,
html body pre code{
  background:transparent !important;
  color:inherit !important;
}
html body .code-h,
html body .sc-h{
  background:#0B1620 !important;
  color:#AEBBD4 !important;
  border-bottom-color:#172B36 !important;
}
html body :not(pre) > code{
  background:#12232E !important;
  color:#AEBBD4 !important;
  border:1px solid #1E3846 !important;
  border-radius:6px;
  padding:.12em .42em;
}
html body .c-key,html body .cl.c-key{color:#6FC3AE !important;}
html body .c-str{color:#E8EEFB !important;}
html body .c-num{color:#E0B04A !important;}
html body .c-com,html body .c-mut{color:#7385A3 !important;}
html body .c-verb{color:#8FD6C3 !important;}
html body .c-ok{color:#34E0A6 !important;}
html body .c-path{color:#AEBBD4 !important;}
html body .c-event{color:var(--mint) !important;}
html body .code-h .tl,html body .sc-h .tl{background:#1E3846 !important;}
/* ==== end code panels ================================================= */


/* ==== De-emphasis without opacity ======================================
   Opacity on text multiplies against the background; stacked on --txt-3 it
   produced 1.40-2.33:1. State is now carried by colour and glyph.
   --txt-3 measures 4.88:1 on the ledger ground. Disabled controls keep
   their opacity — WCAG exempts them.
   ===================================================================== */
.dir a.off b,.dir a.off em,.enum span.off b,.enum span.off em{color:var(--txt-3);}
.soon,.legend i.n,.legend i.x,.mx td.n,.mx td.x{opacity:1;color:var(--txt-3);}
.dir a.off,.enum span.off{opacity:1;}
/* ==== end de-emphasis ================================================= */

/* =========================================================================
   A8 Core - Products Mega Menu (v2)
   Scoped entirely to .nav-mega / .nm-*. Nothing here can reach any other
   card, dropdown or navigation item. Every colour is an existing A8 token;
   type, radius, transitions and the button base are the site's own.
   Panel ground is --ledger-850 (not --ledger-800) for one measured reason:
   the muted category label --txt-3 scores 4.30:1 on #12232E (AA fail) and
   4.63:1 on #0E1C26 (AA pass) - see the report's contrast table.
   ====================================================================== */
:root{ --nm-w:940px; --nm-edge:24px; --nm-t:.18s; }

/* the trigger ---------------------------------------------------------- */
html body header.nav .nav-dd-products{position:static;}          /* panel anchors to the header, not the button */
html body header.nav .nav-dd-products::after{content:none;display:none;} /* kill the 18px hover bridge: panel is flush, no gap to bridge */
html body header.nav .nm-t{cursor:pointer;}
html body header.nav .nm-t .nav-dd-c{transition:transform var(--nm-t) ease;}
html body header.nav .nav-dd-products.nm-open .nm-t{color:var(--txt);}
html body header.nav .nav-dd-products.nm-open .nm-t .nav-dd-c{transform:rotate(180deg);}

/* the panel ------------------------------------------------------------ */
html body header.nav .nav-mega{
  position:absolute; top:100%; left:50%; transform:translateX(-50%) translateY(-6px);
  z-index:70;
  width:min(var(--nm-w), calc(100vw - (var(--nm-edge) * 2)));
  min-width:0; max-width:calc(100vw - (var(--nm-edge) * 2));
  background:var(--ledger-850,#0E1C26);
  border:1px solid var(--line,#1E3846);
  border-radius:16px;
  box-shadow:0 26px 64px -32px #000;
  text-align:left;
  opacity:0; visibility:hidden; pointer-events:none;
  transition:opacity var(--nm-t) ease, transform var(--nm-t) ease, visibility var(--nm-t);
}
html body header.nav .nav-mega .nm-inner{
  max-height:calc(100vh - 140px); overflow-y:auto; overscroll-behavior:contain;
  border-radius:inherit;
}
/* open state: CSS-only fallback is hover/focus; with JS the class is authoritative */
html body header.nav .nav-dd-products:hover > .nav-mega,
html body header.nav .nav-dd-products:focus-within > .nav-mega,
html body header.nav .nav-dd-products.nm-open > .nav-mega{
  opacity:1; visibility:visible; pointer-events:auto;
  transform:translateX(-50%) translateY(0);
}
html.nm-js body header.nav .nav-dd-products:hover > .nav-mega,
html.nm-js body header.nav .nav-dd-products:focus-within > .nav-mega{
  opacity:0; visibility:hidden; pointer-events:none;
  transform:translateX(-50%) translateY(-6px);
}
html.nm-js body header.nav .nav-dd-products.nm-open > .nav-mega{
  opacity:1; visibility:visible; pointer-events:auto;
  transform:translateX(-50%) translateY(0);
}
/* JS-measured horizontal anchor: aligns under the trigger, clamped to the viewport */
html.nm-js body header.nav .nav-mega.nm-anchored{left:var(--nm-x,50%); transform:translateY(-6px);}
html.nm-js body header.nav .nav-dd-products.nm-open > .nav-mega.nm-anchored{transform:translateY(0);}

/* 1 - introductory header --------------------------------------------- */
html body header.nav .nav-mega .nm-head{
  display:flex; align-items:center; justify-content:space-between; gap:28px;
  padding:30px 32px 26px;
  border-bottom:1px solid var(--line-soft,#172B36);
}
html body header.nav .nav-mega .nm-intro{flex:1 1 60%; min-width:0;}
html body header.nav .nav-mega .nm-title{
  font-family:var(--disp),sans-serif; font-size:17px; font-weight:700;
  letter-spacing:-.01em; line-height:1.25; color:var(--txt,#E8EEFB); margin:0 0 6px;
}
html body header.nav .nav-mega .nm-sub{
  font-family:var(--body),sans-serif; font-size:13px; line-height:1.55;
  color:var(--txt-2,#AEBBD4); margin:0; max-width:48ch;
}
html body header.nav .nav-mega .nm-cta{
  flex:0 0 auto; max-width:40%;
  border-color:var(--verd-deep,#2F8B76);
  background:rgba(111,195,174,.08);
  color:var(--verd,#6FC3AE);
  font-size:13.5px; padding:1.2em 1.35em;
}
html body header.nav .nav-mega .nm-cta:hover,
html body header.nav .nav-mega .nm-cta:focus-visible{
  border-color:var(--verd,#6FC3AE); background:rgba(111,195,174,.14);
  color:var(--verd-bright,#8FD6C3);
}

/* 2 - three-column product navigation --------------------------------- */
html body header.nav .nav-mega .nm-cols{
  display:grid; grid-template-columns:repeat(3,minmax(0,1fr));
  gap:0 34px; padding:22px 32px 16px;
}
html body header.nav .nav-mega .nm-col{min-width:0;}
html body header.nav .nav-mega .nm-h{
  font-family:var(--mono),monospace; font-size:11px; font-weight:500;
  letter-spacing:.16em; text-transform:uppercase;
  color:var(--txt-3,#7385A3); margin:0 0 10px;
}
html body header.nav .nav-mega .nm-list{list-style:none; margin:0; padding:0;}
html body header.nav .nav-mega .nm-list li{margin:0; padding:0;}
html body header.nav .nav-mega .nm-list a{
  display:block; position:relative;
  padding:11px 10px; margin-inline:-10px; border-radius:7px;
  font-family:var(--body),sans-serif; font-size:13.5px; font-weight:500;
  line-height:1.4; color:var(--txt-2,#AEBBD4);
  text-decoration:none;
  transition:color var(--nm-t) ease, background-color var(--nm-t) ease;
}
html body header.nav .nav-mega .nm-nw{white-space:nowrap;}
@media (hover:hover) and (pointer:fine){
  html body header.nav .nav-mega .nm-list a:hover{
    color:var(--txt,#E8EEFB); background-color:rgba(111,195,174,.07);
  }
}
html body header.nav .nav-mega .nm-list a:focus-visible{
  color:var(--txt,#E8EEFB); background-color:rgba(111,195,174,.07);
}
/* current page: colour PLUS a rule, never colour alone */
html body header.nav .nav-mega .nm-list a[aria-current="page"]{
  color:var(--verd,#6FC3AE); font-weight:600;
}
html body header.nav .nav-mega .nm-list a[aria-current="page"]::before{
  content:""; position:absolute; left:-10px; top:8px; bottom:8px; width:2px;
  border-radius:2px; background:var(--verd,#6FC3AE);
}

/* 3 - bottom utility navigation --------------------------------------- */
html body header.nav .nav-mega .nm-foot{
  display:grid; grid-template-columns:repeat(3,minmax(0,1fr));
  gap:4px 16px;
  border-top:1px solid var(--line-soft,#172B36);
  padding:19px 20px 21px;
}
html body header.nav .nav-mega .nm-foot a{
  display:inline-flex; align-items:center; gap:.5em; justify-self:start;
  padding:9px 12px; border-radius:7px;
  font-family:var(--body),sans-serif; font-size:13px; font-weight:600;
  color:var(--verd,#6FC3AE); text-decoration:none;
  transition:color var(--nm-t) ease, background-color var(--nm-t) ease;
}
@media (hover:hover) and (pointer:fine){
  html body header.nav .nav-mega .nm-foot a:hover{
    color:var(--verd-bright,#8FD6C3); background-color:rgba(111,195,174,.07);
  }
}
html body header.nav .nav-mega .nm-foot a:focus-visible{
  color:var(--verd-bright,#8FD6C3); background-color:rgba(111,195,174,.07);
}
html body header.nav .nav-mega .nm-ar{
  display:inline-block; transition:transform var(--nm-t) ease;
}
@media (hover:hover) and (pointer:fine){
  html body header.nav .nav-mega a:hover .nm-ar{transform:translateX(3px);}
}

/* focus ring: the site's canonical one, restated so the panel never loses it */
html body header.nav .nav-mega a:focus-visible,
html body header.nav .nm-t:focus-visible{
  outline:2px solid var(--verd-bright,#8FD6C3); outline-offset:2px;
}

/* short viewports / high zoom: two columns rather than a clipped panel */
@media (max-width:1040px) and (min-width:761px){
  html body header.nav .nav-mega .nm-cols{grid-template-columns:repeat(2,minmax(0,1fr));}
  html body header.nav .nav-mega .nm-head{gap:18px;}
  html body header.nav .nav-mega .nm-sub{max-width:40ch;}
}

/* --------------------------------------------------------------------- */
/* Mobile: Products becomes an accordion inside the existing hamburger    */
/* menu. The desktop panel is never squeezed onto a phone.                */
/* --------------------------------------------------------------------- */
@media (max-width:760px){
  html body header.nav .nav-dd-products{position:relative;}
  html body header.nav .nm-t{
    display:flex !important; align-items:center; justify-content:space-between;
    width:100%; min-height:44px; padding:8px 0 !important; text-align:left;
  }
  html body header.nav .nav-mega{
    position:static; left:auto; top:auto; transform:none !important;
    width:100%; max-width:100%;
    opacity:1; visibility:visible; pointer-events:auto;
    background:transparent; border:0; border-radius:0; box-shadow:none;
    display:none;
  }
  html body header.nav .nav-dd-products.nm-open > .nav-mega{display:block;}
  html.nm-js body header.nav .nav-dd-products:hover > .nav-mega,
  html.nm-js body header.nav .nav-dd-products:focus-within > .nav-mega{
    opacity:1; visibility:visible; pointer-events:auto;
  }
  html body header.nav .nav-mega .nm-inner{max-height:none; overflow:visible;}
  html body header.nav .nav-mega .nm-head{
    flex-direction:column; align-items:flex-start; gap:14px;
    padding:6px 0 16px; border-bottom-color:var(--line-soft,#172B36);
  }
  html body header.nav .nav-mega .nm-title{display:none;}   /* the trigger already says Products */
  html body header.nav .nav-mega .nm-sub{display:none;}
  html body header.nav .nav-mega .nm-cta{
    max-width:100%; width:100%; justify-content:center; min-height:44px;
  }
  html body header.nav .nav-mega .nm-cols{
    grid-template-columns:1fr; gap:18px 0; padding:16px 0 8px;
  }
  html body header.nav .nav-mega .nm-list a{
    min-height:44px; display:flex; align-items:center;
    padding:10px 10px; font-size:14px;
  }
  html body header.nav .nav-mega .nm-foot{
    grid-template-columns:1fr; gap:2px; padding:14px 0 6px;
  }
  html body header.nav .nav-mega .nm-foot a{min-height:44px; padding:10px 12px;}
}

/* the hamburger panel must scroll, not run off the page, when Products expands.
   (a8core-docs.css already does this for the 61 docs pages; the other 112 had
   no guard, and an expandable section makes one necessary.) */
@media (max-width:760px){
  html body header.nav .nav-links.open{
    max-height:calc(100dvh - 72px); overflow-y:auto; -webkit-overflow-scrolling:touch;
    overscroll-behavior:contain;
  }
}

@media (prefers-reduced-motion:reduce){
  html body header.nav .nav-mega,
  html body header.nav .nav-mega .nm-ar,
  html body header.nav .nm-t .nav-dd-c,
  html body header.nav .nav-mega .nm-list a,
  html body header.nav .nav-mega .nm-foot a{transition:none !important;}
  html body header.nav .nav-mega{transform:translateX(-50%) !important;}
  html.nm-js body header.nav .nav-mega.nm-anchored{transform:none !important;}
}

/* print: the panel is chrome, never paper */
@media print{ html body header.nav .nav-mega{display:none !important;} }
/* ===================== end Products Mega Menu (v2) ==================== */

/* ====================================================================
   RESPONSIVE CONTAINMENT — added 2026-07-26
   Root cause: `.shell` used a bare `1fr` track. A bare `1fr` is
   minmax(auto,1fr), and that `auto` floor is min-content, so the widest
   unshrinkable descendant sets the column width. `.mx-wrap` already had
   overflow-x:auto but still contributed its child's min-width:900px to
   the track because no ancestor set min-width:0. Result: horizontal
   overflow on the docs family at EVERY width from 320 to 1920.
   Appended rather than edited in place so the cascade order is explicit
   and the original rules remain readable.
   ==================================================================== */
.shell{grid-template-columns:var(--sb) minmax(0,1fr);}
main{min-width:0;max-width:min(880px,100%);}
main section{min-width:0;}
.mx-wrap{min-width:0;max-width:100%;}
main table{width:100%;}
main table :is(th,td),
main :is(p,li,h1,h2,h3,h4,code){overflow-wrap:anywhere;}
main pre{max-width:100%;overflow-x:auto;}
@media (max-width:880px){
  .shell{grid-template-columns:minmax(0,1fr);}
}
/* unclassed docs tables have no scroll wrapper: constrain columns instead,
   which preserves cell alignment (display:block would not). */
main section > table:not([class]){table-layout:fixed;width:100%;}

/* pass 2c: WCAG 2.2 AA 1.4.3 - the muted text token --txt-3 (#7385a3) measured
   3.96-4.43:1 against the six dark surfaces it is used on, below the 4.5:1
   minimum for body-size text. Every one of the 790 measured contrast failures
   across 28 pages resolved to this single token. Brightened by 11.8% with the
   hue held exactly (same R:G:B relationship), which clears 4.66:1 on the
   lightest surface and 6.01:1 on the darkest. No other token is changed. */
:root{--txt-3:#8195B6;}

/* ---- pass 4: navigation chrome, consolidated -------------------------------
   This block was inlined as <style id="a8core-navfix"> on 70 of 191 pages and
   absent from the other 121, including every /api-reference/ page and the
   reusable docs-chrome block. Moved here so one definition serves the whole
   site. Byte-for-byte the same declarations; nothing added, nothing dropped. */
html,body{overflow-x:clip !important;}
html{scroll-padding-top:84px;}
header.nav{position:sticky !important;top:0 !important;z-index:60;}
body.admin-bar header.nav{top:32px !important;}
@media screen and (max-width:782px){body.admin-bar header.nav{top:46px !important;}}
header.nav a, header.nav .nav-dd-menu a, .ribbon a, footer.ft a, a.btn, a.btn-pri, .ccard{text-decoration:none !important;}
header.nav .nav-links{align-items:center !important;}
header.nav .nav-links > a{display:inline-flex !important;align-items:center !important;line-height:1.6 !important;font-size:.88rem !important;font-weight:500 !important;}
header.nav .nav-dd{display:inline-flex !important;align-items:center !important;}
header.nav .nav-dd-t{display:inline-flex !important;align-items:center !important;font-family:inherit !important;font-size:.88rem !important;font-weight:500 !important;line-height:1.6 !important;letter-spacing:inherit !important;color:inherit !important;gap:4px !important;padding:0 !important;background:none !important;border:0 !important;cursor:pointer !important;}
header.nav .nav-dd-menu{left:0 !important;right:auto !important;transform:translateY(6px) !important;}
header.nav .nav-links > .nav-dd:last-child .nav-dd-menu{left:auto !important;right:0 !important;}
@media(max-width:760px){.nav-links.open{max-height:calc(100dvh - 64px);overflow-y:auto;-webkit-overflow-scrolling:touch;}}


/* ==========================================================================
   pass 9 -- brand logo, centralised
   Was <style id="a8logo-inline"> on /home/, /api-access/, /api-terms/ and
   reusable block 3686 (which serves all 61 docs pages); 127 pages never had it.
   MEASURED, and it corrected my own assumption: those 127 pages already computed
   the SAME wordmark as /home/, because this file's own 25 .a8logo rules already
   produce it. So this is a maintainability change, not a visual fix -- one place
   to edit instead of four, and no page renders differently.
   Moved here verbatim; the four inline copies are removed. Byte-identical text,
   appended last so it keeps the cascade position it had inline.
   Revert: delete this block and restore the four inline copies.
   ========================================================================== */
html body a.a8logo{font-family:'Sora',sans-serif !important;display:inline-flex !important;gap:0 !important;column-gap:0 !important;align-items:baseline !important;line-height:1 !important;white-space:nowrap !important;text-decoration:none !important;letter-spacing:-.01em !important;}html body header a.brand.a8logo,html body .nav a.brand.a8logo,html body .ft a.brand.a8logo,html body a.brand.a8logo,html body .brand.a8logo{gap:0 !important;column-gap:0 !important;}html body a.a8logo span.a8{color:#6FC3AE !important;font-weight:800 !important;letter-spacing:-.03em !important;}html body a.a8logo span.core{color:#E8EEFB !important;font-weight:500 !important;letter-spacing:.01em !important;margin-left:.40em !important;}html body a.a8logo span.tm{font-size:.30em !important;font-weight:600 !important;color:#7385A3 !important;vertical-align:baseline !important;position:relative !important;top:-1.05em !important;left:.04em !important;}html body a.a8logo.on-light span.a8{color:#1F8A72 !important;}html body a.a8logo.on-light span.core{color:#0B1620 !important;}html body a.a8logo.on-light span.tm{color:#8A97AD !important;}html body .nav a.brand.a8logo span.core,html body .ft a.brand.a8logo span.core{margin-left:.40em !important;}html body .nav a.brand.a8logo{font-size:1.5rem !important;}html body .ft a.brand.a8logo{font-size:1.4rem !important;}

/* ==========================================================================
   pass 12 -- service-family figure (.svcf)
   Replaces the retired ISCP-era raster graphic. Rebuilt as inline SVG in a
   responsive grid rather than one fixed-layout image, which is the grammar the
   rest of this site already uses (686 inline <svg>, zero <img>) and which
   inherits the containment work from passes 2 and 5. Brand colours are written
   as tokens with literal fallbacks, so the figure survives being dropped onto a
   page whose sheet does not define them.
   ========================================================================== */
.svcf{margin:26px 0 30px;padding:0;border:1px solid var(--line,#1e2d3d);border-radius:16px;
  background:var(--ledger-850,#111c28);overflow:hidden}
.svcf-g{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;margin:0;padding:0;list-style:none;min-width:0}
.svcf-c{min-width:0;padding:22px 18px 24px;border-left:1px solid var(--line,#1e2d3d);text-align:center}
.svcf-c:first-child{border-left:0}
.svcf-ic{display:flex;align-items:center;justify-content:center;width:56px;height:56px;margin:0 auto 14px;
  border:1px solid var(--line,#1e2d3d);border-radius:14px;background:var(--ledger-900,#0b1620);
  color:var(--verd-bright,#8fd6c3)}
.svcf-i{width:26px;height:26px;display:block}
.svcf-i .ac{stroke:var(--verd,#6fc3ae)}
.svcf-n{margin:0 0 7px;font:600 .95rem/1.25 Sora,system-ui,sans-serif;letter-spacing:.01em;
  color:var(--txt-1,#e8eefb)}
.svcf-d{margin:0;font:400 .82rem/1.5 Inter,system-ui,sans-serif;color:var(--txt-2,#aebbd4)}
.svcf-cap{padding:13px 18px;border-top:1px solid var(--line,#1e2d3d);background:var(--ledger-900,#0b1620);
  font:500 .78rem/1.5 Inter,system-ui,sans-serif;color:var(--txt-3,#8195b6);text-align:left}
@media(max-width:1080px){
  .svcf-g{grid-template-columns:repeat(3,minmax(0,1fr))}
  .svcf-c:nth-child(3n+1){border-left:0}
  .svcf-c:nth-child(n+4){border-top:1px solid var(--line,#1e2d3d)}
}
@media(max-width:640px){
  .svcf-g{grid-template-columns:minmax(0,1fr)}
  .svcf-c{border-left:0;text-align:left;display:grid;grid-template-columns:56px minmax(0,1fr);
    gap:0 15px;align-items:start;padding:18px}
  .svcf-c+.svcf-c{border-top:1px solid var(--line,#1e2d3d)}
  .svcf-ic{margin:0}
  .svcf-n{grid-column:2;margin-top:2px}
  .svcf-d{grid-column:2}
}


/* ==========================================================================
   pass 20 -- links inside the service-family figure caption
   Pass 19 added an anchor to .svcf-cap and it rendered in --txt-3, the same
   colour as the caption text around it: a link identified by nothing, which is
   a WCAG 1.4.1 problem, not merely a cosmetic one. .svcf-cap sets the colour and
   nothing styled an <a> inside it.
   Added to BOTH sheets on purpose. Only /api-reference/ uses the figure today
   and it loads a8core-docs.css only -- but the pass-12 .svcf block is in both
   sheets precisely so the component works on either page family, and letting the
   two copies diverge is how a shared component rots.
   ========================================================================== */
.svcf-cap a{color:var(--verd-bright,#8fd6c3);text-decoration:underline;}
.svcf-cap a:hover{color:var(--verd,#6fc3ae);}

/* ===== brand pass 2026-07-31 (measured in Chromium 141) ==============
   API PARAMETER TABLES -- the Type and badge columns collapsed BELOW the
   width of the word they hold: "string" painted as "stri"/"ng",
   "optional" as "optiona"/"l", "required" as "require"/"d".

   MEASURED CAUSE, not inferred. The table's computed display is `table`
   and its table-layout is `auto` -- so neither the display:block rule nor
   any table-layout:fixed rule is involved. What is involved is that `td`
   computes `overflow-wrap: anywhere`, which INHERITS into the .ty/.opt/
   .req/.cond spans. `anywhere` (unlike `break-word`) lowers a box's
   MIN-CONTENT contribution to a single character, so automatic table
   layout is free to shrink those columns below their own words. No rule
   matches .ty directly; the value arrives purely by inheritance.

   FIX: suppress the soft-wrap opportunity on the four badge/type spans
   only. Measured at 1440 / 1280 / 1024 / 834 / 600 px: 12 wrapped spans
   -> 0, Type column 53 -> 70 px, badge column 75 -> 108 px, and the table
   still fits its wrapper exactly (overflow 0). At 390 px the table
   overflows by 81 px into .mx-wrap's existing overflow-x:auto, so it
   scrolls rather than mangles -- the same behaviour the 40 .mx matrix
   tables in the same wrapper already rely on.

   Scoped to `.mx-wrap > table:not([class])`, which is exactly the 176
   parameter tables; the 40 .mx matrix tables and the 3 .api-tbl tables
   are untouched. .req is also used by form labels, so the scope matters. */
.mx-wrap > table:not([class]) :is(.ty,.opt,.req,.cond){
  white-space:nowrap;overflow-wrap:normal}
