/* Venturi docs brand layer on top of Material for MkDocs.

   Authority: Venturi design system v6.6.0, documentation register
   (components documentation-shell, -navbar, -sidebar, -table-of-contents,
   -typography, -details, -footer, -search, code-block and admonition; exact
   values from the suite's generated tokens, docs.* roles). The suite ships no
   MkDocs adapter, so this file maps Material's --md-* variables and classes
   onto those roles, following the pattern of the suite's Docusaurus and
   Starlight adapters.

   Token names: the --venturi-* names are kept (they are the contrast gate's
   vocabulary and are consumed throughout this file); their values are
   re-pointed to the documentation-register roles named beside each one.
   NOTE: scripts/validate_contrast.py parses the --venturi-* hex tokens out of
   the light and dark (slate-scheme) token blocks below and asserts the WCAG-AA
   pairs. Keep the token NAMES and BOTH blocks intact, keep every token that a
   pair references as a #rrggbb literal, and do not mention the selectors
   verbatim in comments above the blocks (the validator locates each block by
   its first occurrence in the file). */

/* Self-hosted suite fonts (SIL Open Font License 1.1, licence text in
   assets/fonts/LICENSE-OFL.txt). Byte-identical to ASSETS/FONTS in the suite;
   the file names carry the first 8 hex digits of each file's SHA-256, so the
   artifact can cache them immutably. unicode-range values are the suite's. */
@font-face {
  font-family: "DM Sans";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../assets/fonts/DMSans-latin-ext.c1054a72.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "DM Sans";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../assets/fonts/DMSans-latin.f4c7f982.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Space Grotesk";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../assets/fonts/SpaceGrotesk-vietnamese.c8d96715.woff2") format("woff2");
  unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}

@font-face {
  font-family: "Space Grotesk";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../assets/fonts/SpaceGrotesk-latin-ext.d825b0ad.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: "Space Grotesk";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("../assets/fonts/SpaceGrotesk-latin.7e355015.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* Material's off-canvas drawer and search overlay extend past the viewport on
   narrow screens; without containment the body scrolls ~7px horizontally at
   375px. clip (not hidden) avoids creating a new scroll container. */
body {
  overflow-x: clip;
}

/* Material does not ship a reusable visually-hidden utility. The header
   override adds real text names to its label-based controls; keep those names
   available to assistive technology without rendering them as tiny captions
   under the menu and search icons. */
.md-visually-hidden {
  border: 0 !important;
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  height: 1px !important;
  margin: -1px !important;
  overflow: hidden !important;
  padding: 0 !important;
  position: absolute !important;
  white-space: nowrap !important;
  width: 1px !important;
}

/* Light theme: documentation-register roles (theme.light.color.docs.*). */
:root {
  --venturi-ink: #1c1e21;            /* docs.text */
  --venturi-muted: #525860;          /* docs.text-secondary */
  --venturi-subtle: #525860;         /* metadata: docs.text-secondary (AA on every docs surface) */
  --venturi-nav: #606770;            /* docs.sidebar-text */
  --venturi-navy: #102445;           /* docs.sidebar-active-text */
  --venturi-border: #ebedf0;         /* docs.border-subtle */
  --venturi-border-strong: #dadde1;  /* docs.border (also docs.table-border, docs.toc-border) */
  --venturi-link-underline: #7d7d7d; /* border.emphasis: prose link underline at rest */
  --venturi-toc-border: #dadde1;     /* docs.toc-border */
  --venturi-hr: #bec3c9;             /* docs.hr */
  --venturi-canvas: #ffffff;         /* docs.page */
  --venturi-surface: #ffffff;        /* docs.surface and docs.navbar-bg */
  --venturi-surface-alt: #f6f7f8;    /* docs.code-inline-bg */
  --venturi-code-bg: #f6f8fa;        /* docs.code-block-bg */
  --venturi-teal: #046b15;           /* docs.copy-success: verified or successful outcome signal */
  --venturi-teal-bright: #046b15;    /* docs.copy-success */
  --venturi-blue: #178087;           /* docs.primary and docs.link: the single interaction accent */
  --venturi-blue-strong: #157379;    /* docs.primary-hover: hover, and links on tinted surfaces */
  --venturi-search-bg: #ebedf0;      /* docs.search-bg */
  --venturi-search-text: #444950;    /* docs.search-text */
  --venturi-footer-bg: #ffffff;      /* owner-approved public footer: surface.page */
  --venturi-footer-text: #000000;    /* public footer: text.primary */
  --venturi-footer-title: #666666;   /* public footer: text.secondary */
  --venturi-footer-hover: #000000;   /* public footer: text.primary */
  --venturi-note-bg: #fdfdfe;        /* docs.note-* */
  --venturi-note-fg: #474748;
  --venturi-note-border: #d4d5d8;
  --venturi-tip-bg: #e6f6e6;         /* docs.tip-* */
  --venturi-tip-fg: #003100;
  --venturi-tip-border: #009400;
  --venturi-info-bg: #eef9fd;        /* docs.info-* */
  --venturi-info-fg: #193c47;
  --venturi-info-border: #4cb3d4;
  --venturi-warning-bg: #fff8e6;     /* docs.warning-* */
  --venturi-warning-fg: #4d3800;
  --venturi-warning-border: #e6a700;
  --venturi-danger-bg: #ffebec;      /* docs.danger-* */
  --venturi-danger-fg: #4b1113;
  --venturi-danger-border: #e13238;
  --venturi-code-plain: #393a34;     /* docs.code-* syntax roles */
  --venturi-code-comment: #5f6368;
  --venturi-code-string: #c4005a;
  --venturi-code-keyword: #00009f;
  --venturi-code-property: #147a78;
  --venturi-code-attr: #006f91;
  --venturi-code-highlight: #e8f2f3;
  --venturi-safe-top: env(safe-area-inset-top, 0px);
  --venturi-safe-right: env(safe-area-inset-right, 0px);
  --venturi-safe-bottom: env(safe-area-inset-bottom, 0px);
  --venturi-safe-left: env(safe-area-inset-left, 0px);

  /* Non-hex roles (ignored by the contrast validator). */
  --venturi-accent-wash: rgba(0, 0, 0, 0.05);     /* docs.hover-overlay, docs.sidebar-hover-bg */
  --venturi-stripe: rgba(0, 0, 0, 0.03);          /* docs.table-stripe */
  --venturi-code-inline-border: rgba(0, 0, 0, 0.1); /* docs.code-inline-border */
  --venturi-focus: rgba(0, 0, 0, 0.9);            /* interactive.focus-ring */
  --venturi-shadow-low: 0 1px 2px 0 rgba(0, 0, 0, 0.1); /* shadow.docs-low */
  --venturi-scrim: rgba(0, 0, 0, 0.2);            /* surface.scrim */
  --venturi-scroll-cue: rgba(0, 0, 0, 0.16);      /* edge shadow on a scrollable table or diagram */

  /* Typography, geometry and motion roles (non-color). */
  --venturi-sans: "DM Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --venturi-display: var(--venturi-sans);
  --venturi-grotesk: "Space Grotesk", "DM Sans", ui-sans-serif, system-ui, sans-serif;
  --venturi-mono: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  --venturi-r-card: 6px;             /* radius-6: docs code, admonitions, pagination */
  --venturi-r-control: 8px;          /* radius-8: search field and navbar controls */
  --venturi-r-row: 4px;              /* radius-4: sidebar rows */
  --venturi-shadow-quiet: var(--venturi-shadow-low);
  --venturi-navbar-height: 60px;     /* size.docs-navbar */
  --venturi-sidebar-width: 300px;    /* size.docs-sidebar */
  --venturi-toc-width: 298px;        /* size.docs-toc */
  --venturi-measure: min(76ch, 704px); /* documentation-typography: 640-704px sustained prose measure */
  --venturi-operating-measure: 46rem;  /* action lanes and callouts; never binds titles, tables or code */
  --venturi-duration: 200ms;         /* duration.fast */
  --venturi-ease: cubic-bezier(0.2, 0, 0, 1);

  --md-text-font: "DM Sans";
  --md-code-font: SFMono-Regular;
}

/* Dark theme: documentation-register roles (theme.dark.color.docs.*). */
[data-md-color-scheme="slate"] {
  --venturi-ink: #e3e3e3;            /* docs.text */
  --venturi-muted: #ffffff;          /* docs.text-secondary */
  --venturi-subtle: #ccd0d5;         /* docs.search-icon: metadata */
  --venturi-nav: #f2eded;            /* docs.sidebar-text */
  --venturi-navy: #ebf2fc;           /* docs.sidebar-active-text */
  --venturi-border: #444950;         /* docs.border-subtle */
  --venturi-border-strong: #606770;  /* docs.border */
  --venturi-link-underline: #8d949e; /* border.emphasis */
  --venturi-toc-border: #444950;     /* docs.toc-border */
  --venturi-canvas: #1b1b1d;         /* docs.page */
  --venturi-surface: #242526;        /* docs.surface and docs.navbar-bg */
  --venturi-surface-alt: #323234;    /* docs.code-inline-bg (white 10% over docs.page) */
  --venturi-code-bg: #282a36;        /* docs.code-block-bg */
  --venturi-teal: #4fcd44;           /* docs.copy-success */
  --venturi-teal-bright: #4fcd44;
  --venturi-blue: #3ed0dd;           /* docs.primary and docs.link */
  --venturi-blue-strong: #26cad9;    /* docs.primary-hover */
  --venturi-search-bg: #444950;      /* docs.search-bg */
  --venturi-search-text: #ebedf0;    /* docs.search-text */
  --venturi-footer-bg: #303846;      /* preserve explicit dark appearance preference */
  --venturi-footer-text: #ebedf0;
  --venturi-footer-title: #ffffff;
  --venturi-footer-hover: #86e2ea;
  --venturi-note-bg: #474748;
  --venturi-note-fg: #fdfdfe;
  --venturi-note-border: #8d949e;
  --venturi-tip-bg: #003100;
  --venturi-tip-fg: #e6f6e6;
  --venturi-tip-border: #009400;
  --venturi-info-bg: #193c47;
  --venturi-info-fg: #eef9fd;
  --venturi-info-border: #4cb3d4;
  --venturi-warning-bg: #4d3800;
  --venturi-warning-fg: #fff8e6;
  --venturi-warning-border: #e6a700;
  --venturi-danger-bg: #4b1113;
  --venturi-danger-fg: #ffebec;
  --venturi-danger-border: #e13238;
  --venturi-code-plain: #f8f8f2;
  --venturi-code-comment: #9aa6d1;
  --venturi-code-string: #ff79c6;
  --venturi-code-keyword: #bd93f9;
  --venturi-code-property: #8be9fd;
  --venturi-code-attr: #50fa7b;

  --venturi-code-highlight: rgba(62, 208, 221, 0.25);
  --venturi-accent-wash: rgba(255, 255, 255, 0.05);
  --venturi-stripe: rgba(255, 255, 255, 0.07);
  --venturi-focus: rgba(255, 255, 255, 0.9);
  --venturi-scrim: rgba(0, 0, 0, 0.5);
  --venturi-scroll-cue: rgba(255, 255, 255, 0.16);

  color-scheme: dark;
}

/* Material reads its own --md-* variables at body (scheme) scope, so they are
   mapped here, on the same element that carries the theme tokens, and resolve
   to the active theme's values. Material's own scheme blocks are declared
   before this file and lose the cascade. */
[data-md-color-scheme="default"] {
  color-scheme: light;
}

[data-md-color-scheme] {
  --md-default-fg-color: var(--venturi-ink);
  --md-default-fg-color--light: var(--venturi-muted);
  --md-default-fg-color--lighter: var(--venturi-border-strong);
  --md-default-fg-color--lightest: var(--venturi-border);
  --md-default-bg-color: var(--venturi-canvas);
  --md-default-bg-color--light: var(--venturi-canvas);
  --md-default-bg-color--lighter: var(--venturi-canvas);
  --md-default-bg-color--lightest: var(--venturi-canvas);
  --md-primary-fg-color: var(--venturi-surface);
  --md-primary-fg-color--light: var(--venturi-surface);
  --md-primary-fg-color--dark: var(--venturi-surface);
  --md-primary-bg-color: var(--venturi-ink);
  --md-primary-bg-color--light: var(--venturi-muted);
  --md-accent-fg-color: var(--venturi-blue-strong);
  --md-accent-fg-color--transparent: var(--venturi-accent-wash);
  --md-accent-bg-color: var(--venturi-canvas);
  --md-accent-bg-color--light: var(--venturi-canvas);
  --md-typeset-color: var(--venturi-ink);
  --md-typeset-a-color: var(--venturi-blue);
  --md-typeset-table-color: var(--venturi-border-strong);
  --md-typeset-table-color--light: var(--venturi-stripe);
  --md-typeset-kbd-color: var(--venturi-surface-alt);
  --md-typeset-kbd-accent-color: var(--venturi-border-strong);
  --md-typeset-kbd-border-color: var(--venturi-border-strong);
  --md-admonition-fg-color: var(--venturi-ink);
  --md-admonition-bg-color: var(--venturi-canvas);
  --md-footer-fg-color: var(--venturi-footer-text);
  --md-footer-fg-color--light: var(--venturi-footer-text);
  --md-footer-fg-color--lighter: var(--venturi-footer-text);
  --md-footer-bg-color: var(--venturi-footer-bg);
  --md-footer-bg-color--dark: var(--venturi-footer-bg);
  --md-code-fg-color: var(--venturi-code-plain);
  --md-code-bg-color: var(--venturi-code-bg);
  --md-code-bg-color--light: var(--venturi-code-bg);
  --md-code-bg-color--lighter: var(--venturi-code-bg);
  --md-code-hl-color: var(--venturi-blue);
  --md-code-hl-color--light: var(--venturi-code-highlight);
  --md-code-hl-keyword-color: var(--venturi-code-keyword);
  --md-code-hl-string-color: var(--venturi-code-string);
  --md-code-hl-special-color: var(--venturi-code-string);
  --md-code-hl-comment-color: var(--venturi-code-comment);
  --md-code-hl-generic-color: var(--venturi-code-comment);
  --md-code-hl-function-color: var(--venturi-code-attr);
  --md-code-hl-number-color: var(--venturi-code-property);
  --md-code-hl-constant-color: var(--venturi-code-property);
  --md-code-hl-variable-color: var(--venturi-code-property);
  --md-code-hl-name-color: var(--venturi-code-plain);
  --md-code-hl-operator-color: var(--venturi-code-plain);
  --md-code-hl-punctuation-color: var(--venturi-code-plain);
}

/* The documentation register sets exact pixel type. Material scales its root
   to 137.5% and 150% on wide screens, which inflated body copy to 17.6-18px;
   the root stays at Material's 125% step so rem-based Material geometry and
   the px type steps below agree at every width. */
html {
  -webkit-text-size-adjust: 100%;
  scroll-padding-top: calc(var(--venturi-navbar-height) + 16px + var(--venturi-safe-top));
}

@media screen and (min-width: 100em) {
  html {
    font-size: 125%;
  }
}

@media screen and (min-width: 125em) {
  html {
    font-size: 125%;
  }
}

body {
  background: var(--venturi-canvas);
  color: var(--venturi-ink);
}

body,
input {
  font-family: var(--venturi-sans);
}

code,
kbd,
pre {
  font-family: var(--venturi-mono);
}

/* One focus treatment everywhere: the interactive focus ring, 2px wide at a
   2px offset (focus contract). html:root raises the rule above Material's
   ":not(.focus-visible) { outline: none }" suppressors and its per-component
   ".focus-visible" offsets (0.1rem to 0.2rem), which it matches or outranks
   and follows in the cascade. */
html:root :focus-visible,
html:root .focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

/* The appearance toggle is a visually hidden radio group; the visible icon
   label beside the focused radio carries its ring. */
html:root .md-option:focus-visible + label,
html:root .md-option.focus-visible + label {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

@media (forced-colors: active) {
  html:root :focus-visible,
  html:root .focus-visible,
  html:root .md-option:focus-visible + label {
    outline-color: Highlight;
  }
}

/* ---------- Shell: no whole-page cap; rails return their width ---------- */

.md-grid {
  /* layout-composition: no universal fixed maximum governs the page shell.
     Header, content and footer share one full-width rail. */
  max-width: none;
}

.md-main {
  background: transparent;
}

.md-content {
  background: transparent;
}

.md-content__inner {
  /* The article is the container for component queries, so component
     breakpoints measure the region the component actually occupies. */
  container: venturi-content / inline-size;
  margin-bottom: 80px;
  margin-left: 20px;
  margin-right: 20px;
  padding-top: 16px;
}

.md-content__inner::before {
  display: none;
}

@media screen and (min-width: 48em) {
  .md-content__inner {
    margin-left: 24px;
    margin-right: 24px;
  }
}

.md-sidebar {
  top: var(--venturi-navbar-height);
}

@media screen and (min-width: 76.25em) {
  .md-sidebar--primary {
    /* Keep desktop row wraps stable while Space Grotesk loads. The local
       Arial-compatible fallback fits the rail before the wider DM Sans;
       the compact drawer keeps its existing font stack. */
    --venturi-grotesk: "Space Grotesk", Arial, "Liberation Sans", "DM Sans", ui-sans-serif, system-ui, sans-serif;
    width: var(--venturi-sidebar-width);
  }

  .md-sidebar--primary .md-sidebar__scrollwrap {
    border-right: 1px solid var(--venturi-border);
    margin: 0;
    /* The stable scrollbar gutter already spaces the rows from the edge. */
    padding: 0 0 0 8px;
  }

  /* Material pins the rail content to 11.5rem; the rail width is the
     documentation sidebar token, so the rows use all of it. */
  .md-sidebar--primary .md-sidebar__inner {
    padding-right: 0;
  }

  /* The drawer title is the compact-width header; the desktop rail starts
     directly with the task groups under the navbar identity. */
  .md-nav--primary > .md-nav__title {
    display: none;
  }
}

@media screen and (min-width: 60em) {
  .md-sidebar--secondary {
    width: var(--venturi-toc-width);
  }

  .md-sidebar--secondary .md-sidebar__scrollwrap {
    margin: 0;
    padding: 0 8px 0 8px;
  }

  .md-sidebar--secondary .md-sidebar__inner {
    padding-right: 0;
  }
}

/* documentation-table-of-contents: the rail is the first region the shell
   drops, at 1279px and below; its width returns to the article. */
@media screen and (min-width: 60em) and (max-width: 79.9375em) {
  .md-sidebar--secondary:not([hidden]) {
    display: none;
  }
}

/* Reserve the server-known right rail while the article is still streaming. */
@media screen and (min-width: 80em) {
  .md-content--with-toc {
    max-width: calc(100% - var(--venturi-toc-width));
  }

  .md-sidebar--primary:not([hidden]) ~ .md-content--with-toc {
    max-width: calc(100% - var(--venturi-sidebar-width) - var(--venturi-toc-width));
  }
}

/* ---------- Navbar (documentation-navbar) ---------- */

.md-header {
  background: var(--venturi-surface);
  border-bottom: 0;
  box-shadow: var(--venturi-shadow-low);
  color: var(--venturi-ink);
}

.md-header--shadow {
  box-shadow: var(--venturi-shadow-low);
}

.md-header__inner {
  gap: 4px;
  min-height: var(--venturi-navbar-height);
  padding-left: max(8px, var(--venturi-safe-left));
  padding-right: max(8px, var(--venturi-safe-right));
}

.md-header__button {
  border-radius: var(--venturi-r-control);
  min-height: 44px;
  min-width: 44px;
}

/* 24px icon plus 10px padding: a 44px target for every icon control. */
.md-header__button.md-icon {
  padding: 10px;
}

.md-header__button:hover {
  background: var(--venturi-accent-wash);
  opacity: 1;
}

/* documentation-navbar: identity stays reachable at every width (Material
   hides the header logo while its drawer is in use). */
.md-header__button.md-logo {
  display: inline-block;
  margin: 0 4px 0 8px;
  padding: 10px 8px;
}

.md-header__button.md-logo:hover,
.md-nav__button.md-logo:hover {
  background: transparent;
}

.venturi-lockup {
  display: block;
  line-height: 0;
}

/* Identity: the horizontal lockup at 24px (its minimum), width from the
   supplied 289.491143 x 59.8 viewBox. */
.venturi-lockup svg,
.md-header__button.md-logo .venturi-lockup svg,
.md-nav__button.md-logo .venturi-lockup svg {
  display: block;
  fill: currentColor;
  height: 24px;
  width: auto;
}

.md-header__title {
  font-family: var(--venturi-sans);
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 0;
  margin-left: 4px;
}

.md-header__title .md-header__topic {
  color: var(--venturi-muted);
}

.venturi-header__links {
  align-items: center;
  display: flex;
  gap: 4px;
  list-style: none;
  margin: 0 0 0 8px;
  padding: 0;
}

.venturi-header__link {
  align-items: center;
  border-radius: var(--venturi-r-control);
  color: var(--venturi-ink);
  display: inline-flex;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.2;
  min-height: 44px;
  padding: 0 12px;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.venturi-header__link:is(:hover, :focus-visible) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-blue-strong);
}

/* The palette form holds the appearance toggle (System, Light, Dark). */
.md-header__option {
  align-items: center;
  display: flex;
}

/* Search (documentation-search): a filled field with a real focus ring. */
.md-search__form {
  background: var(--venturi-search-bg);
  border: 1px solid var(--venturi-border-strong);
  border-radius: var(--venturi-r-control);
  box-shadow: none;
  transition: border-color var(--venturi-duration) var(--venturi-ease);
}

.md-search__form:hover {
  background: var(--venturi-search-bg);
  border-color: var(--venturi-blue);
}

.md-search__form:focus-within {
  border-color: var(--venturi-blue);
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.md-search__input,
.md-search__icon {
  color: var(--venturi-search-text);
}

.md-search__input {
  font-size: 16px;
}

.md-search__input::placeholder {
  color: var(--venturi-subtle);
  opacity: 1;
}

.md-search__input:focus-visible {
  outline: none;
}

.md-search-result__link:is(:focus, :hover),
.md-search-result__more > summary:is(:focus, :hover) {
  background: var(--venturi-accent-wash);
}

/* A closed search overlay leaves the focus and reading order: its empty
   result scroller was a zero-height tab stop at every width. */
[data-md-toggle="search"]:not(:checked) ~ .md-header .md-search__output {
  visibility: hidden;
}

/* ---------- Breadcrumbs (navigation.path) ---------- */

.md-path {
  margin-bottom: 8px;
}

.md-path__list {
  color: var(--venturi-muted);
  /* Material's breadcrumb row is a no-wrap flex line that hard-clips the last
     item mid-word on narrow screens; wrapping keeps every crumb readable. */
  flex-wrap: wrap;
  font-size: 14px;
  row-gap: 0;
}

.md-path__item {
  align-items: center;
}

.md-path__item:not(:first-child) {
  white-space: normal;
}

.md-path__link {
  border-radius: 24px;
  color: var(--venturi-muted);
  padding: 2px 8px;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-path__item:first-child .md-path__link {
  margin-left: -8px;
}

.md-path__link:is(:focus, :hover) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-ink);
}

/* ---------- Sidebar menu (documentation-sidebar) ---------- */

.md-sidebar {
  color: var(--venturi-nav);
}

.md-sidebar--primary .md-sidebar__scrollwrap {
  scrollbar-color: var(--venturi-border-strong) transparent;
}

.md-nav {
  font-size: 15px;
}

.md-nav__title {
  color: var(--venturi-ink);
  font-weight: 700;
}

.md-sidebar--primary .md-nav__link {
  font-family: var(--venturi-grotesk);
  font-size: 15px;
  line-height: 1.25;
}

.md-nav__link .md-ellipsis,
.md-sidebar--primary .md-nav__link {
  text-wrap: balance;
}

/* documentation-sidebar: top-level rows sit on the rail's own 8px inset and
   each nested level indents 12px. Material indents every list, the root
   included, by 0.6rem, which also grows with its root font steps at 1600px
   and wider; fixed px keep the 300px rail's label width constant. */
@media screen and (min-width: 76.25em) {
  [dir] .md-sidebar--primary .md-nav--primary > .md-nav__list {
    padding-inline: 0;
  }

  [dir] .md-sidebar--primary .md-nav--primary .md-nav__list .md-nav__list {
    padding-inline: 12px 0;
  }

  /* Rows keep the 12px leading inset and end 4px short of the rail edge
     (Material reserves 8px there), which keeps the deepest labels
     ("Finance chargeback acceptance", third level) on one line with room
     for rasterizer differences between Chromium builds. */
  .md-sidebar--primary .md-nav__item .md-nav__link {
    padding-inline-end: 8px;
  }

  [dir] .md-sidebar--primary .md-nav--primary .md-nav__item > .md-nav__link {
    margin-inline: 0 4px;
  }
}

/* The primary sidebar exposes 5 predictable customer task groups. */
.md-sidebar--primary .md-nav[data-md-level="0"] > .md-nav__list > .md-nav__item > .md-nav__link {
  color: var(--venturi-navy);
  font-weight: 600;
}

.md-sidebar--primary .md-nav[data-md-level="0"] > .md-nav__list > .md-nav__item {
  margin-bottom: 2px;
}

.md-sidebar--primary .md-nav[data-md-level="0"] > .md-nav__list > .md-nav__item > .md-nav__link--active {
  color: var(--venturi-navy);
}

/* Section indexes (navigation.indexes) render as a .md-nav__container holding
   the page link and the expand toggle side by side. The container carries the
   .md-nav__link class itself, so the row padding was applied twice (a 9px
   extra indent) and the visible link fell through to the generic muted
   register — "Start" and "Integrate" read as children of their siblings.
   On the desktop rail the container contributes no padding of its own and
   the inner link keeps the row register of its level. (In the drawer Material
   already moves the padding onto the container and zeroes the children, so
   the reset is desktop-only.) */
@media screen and (min-width: 76.25em) {
  .md-nav__item .md-nav__link.md-nav__container {
    padding: 0;
  }
}

.md-sidebar--primary .md-nav[data-md-level="0"] > .md-nav__list > .md-nav__item > .md-nav__container > a.md-nav__link {
  color: var(--venturi-navy);
  font-weight: 600;
}

.md-sidebar--primary .md-nav[data-md-level="0"] > .md-nav__list > .md-nav__item > .md-nav__container > a.md-nav__link--active {
  color: var(--venturi-navy);
}

/* The expand toggle beside an index link is icon-only; keep it a real target. */
.md-nav__container > label.md-nav__link {
  flex: none;
  justify-content: center;
  min-width: 1.6rem;
}

.md-nav__item .md-nav__link {
  border-radius: var(--venturi-r-row);
  color: var(--venturi-nav);
  font-weight: 500;
  margin: 1px 0;
  padding: 8px 12px;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-nav__link:is(:focus, :hover) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-navy);
}

.md-header__button:focus-visible,
.md-nav__link:focus-visible,
.md-path__link:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

/* Header toggles (#267): the drawer and search labels each hold a real
   <button> (docs/overrides/main.html). The button fills its label, takes over
   the label's padding and carries the focus ring, so the hit area, icon
   position and focus indicator match the bare label. */
.md-header__button.venturi-header-toggle-host {
  padding: 0;
}

.venturi-header-toggle {
  align-items: center;
  appearance: none;
  background: none;
  border: 0;
  border-radius: inherit;
  color: inherit;
  cursor: pointer;
  display: flex;
  font: inherit;
  height: 100%;
  justify-content: center;
  margin: 0;
  min-height: inherit;
  min-width: inherit;
  padding: 0.4rem;
  width: 100%;
}

.venturi-header-toggle:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

/* Drawer close control (docs/overrides/main.html): the modal navigation
   drawer's own "Close navigation" button, a 44px icon target at the drawer's
   top inline-end corner, where neither the drawer title (logo, or a nested
   section's back arrow) nor its label reaches. It takes focus when the drawer
   opens and exists only while Material shows the sidebar as a drawer. */
.venturi-drawer-close {
  display: none;
}

@media screen and (max-width: 76.234375em) {
  .venturi-drawer-close {
    align-items: center;
    appearance: none;
    background: var(--venturi-surface);
    border: 0;
    border-radius: var(--venturi-r-control);
    color: var(--venturi-ink);
    cursor: pointer;
    display: inline-flex;
    height: 44px;
    inset-block-start: 8px;
    inset-inline-end: 8px;
    justify-content: center;
    margin: 0;
    padding: 0;
    position: absolute;
    width: 44px;
    z-index: 5;
  }

  .venturi-drawer-close:hover {
    background: var(--venturi-accent-wash);
  }

  .venturi-drawer-close:focus-visible {
    outline: 2px solid var(--venturi-focus);
    outline-offset: -2px;
  }

  /* The drawer title row keeps its content clear of the close button. */
  .md-sidebar--primary .md-nav--primary > .md-nav__title {
    padding-inline-end: 60px;
  }
}

/* Current page: the hover fill at rest, active text and weight 600, plus a
   2px accent edge so the state never depends on color alone. */
.md-nav__link--active,
.md-nav__item .md-nav__link--active {
  background: var(--venturi-accent-wash);
  color: var(--venturi-navy);
  font-weight: 600;
}

.md-sidebar--primary .md-nav__item a.md-nav__link--active {
  box-shadow: inset 2px 0 0 var(--venturi-blue);
}

/* The expand toggle beside the current section index is not itself the
   current page: it keeps the resting row treatment. */
.md-sidebar--primary .md-nav__container > label.md-nav__link--active {
  background: transparent;
}

/* ---------- Table of contents (documentation-table-of-contents) ---------- */

.md-sidebar--secondary .md-sidebar__scrollwrap {
  border-left: 1px solid var(--venturi-toc-border);
}

/* TOC title stays in the load-bearing navigation register: sentence case,
   14px, no tracking. */
.md-sidebar--secondary .md-nav__title {
  background: transparent;
  box-shadow: none;
  color: var(--venturi-ink);
  font-family: var(--venturi-sans);
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
}

/* A one-line link is 23.1px tall at 14px on the 1.65 line height; the
   minimum block size makes every link a 24px target (WCAG 2.2 target size)
   with its text centred, and a wrapped link grows as before. */
.md-sidebar--secondary .md-nav__link {
  align-items: center;
  border-radius: 0;
  box-sizing: border-box;
  color: var(--venturi-muted);
  font-family: var(--venturi-sans);
  font-size: 14px;
  font-weight: 400;
  line-height: 1.65;
  margin: 4px 0;
  min-block-size: 24px;
  padding: 0 8px;
}

.md-sidebar--secondary .md-nav__link:is(:focus, :hover),
.md-sidebar--secondary .md-nav__link--active,
.md-sidebar--secondary .md-nav__item .md-nav__link--active {
  background: transparent;
  box-shadow: none;
  color: var(--venturi-blue-strong);
  font-weight: 400;
}

/* The current section (aria-current="location", set by
   javascripts/a11y-nav-labels.js) also carries a 2px leading accent edge, so
   the state never depends on color alone. */
.md-sidebar--secondary .md-nav__link--active,
.md-sidebar--secondary .md-nav__item .md-nav__link--active {
  box-shadow: inset 2px 0 0 var(--venturi-blue);
}

/* ---------- Article typography (documentation-typography) ---------- */

.md-typeset {
  color: var(--venturi-ink);
  font-size: 16px;
  line-height: 1.65;
}

.md-typeset p,
.md-typeset li {
  line-height: 1.65;
}

/* Prose, list items, definitions and table cells take text-wrap: pretty,
   the design system's line-formation aid for short supporting copy and
   prose (typography-quality remediation step 4); balance stays with
   headings. Aids only, never a substitute for the rendered check. */
.md-typeset p,
.md-typeset li,
.md-typeset dt,
.md-typeset dd,
.md-typeset th,
.md-typeset td {
  text-wrap: pretty;
}

/* Short copy in Markdown blocks: a list item, definition or table cell that
   the build did not mark as paragraph-form prose (scripts/mkdocs_hooks.py
   text_profile: a label, a value, an instruction or one qualified
   statement) is compact copy. Its lines are balanced (typography-quality
   remediation step 4, "semantic balance"), so its last line is never a
   stranded word or a short tail; prose keeps pretty. Authored components
   (classed lists and tables) keep their own line formation. */
.md-typeset :is(ul, ol):not([class]) > li:not([class]):not([data-text-profile="prose"]),
.md-typeset .task-list > .task-list-item:not([data-text-profile="prose"]),
.md-typeset table:not([class]) :is(td, th):not([data-text-profile="prose"]),
.md-typeset dl:not([class]) > :is(dt, dd):not([data-text-profile="prose"]),
.md-typeset p[data-text-profile="short-copy"] {
  text-wrap: balance;
}

/* Chromium 149 (measured; 153 is not affected) lays a balanced or pretty
   line out without the end padding and border of an inline box that closes
   the line, so a line ending in inline code reached up to 5px past its
   block (balanced short copy at 320px; a prose paragraph under the
   text-spacing override). A text block that holds inline code reserves that
   decoration (0.4em) at its inline end, so the code box always stays inside
   the block. Table cells already carry 12px of inline padding. */
.md-typeset :is(p, li, dt, dd):has(> code, > a > code, > strong > code, > em > code) {
  padding-inline-end: 0.4em;
}

.md-typeset h1,
.md-typeset h2,
.md-typeset h3,
.md-typeset h4 {
  color: var(--venturi-ink);
  font-family: var(--venturi-sans);
  font-weight: 700;
  letter-spacing: 0;
  line-height: 1.25;
  scroll-margin-top: calc(var(--venturi-navbar-height) + 16px);
  text-wrap: balance;
  /* Under the WCAG 1.4.12 text-spacing override a long word can outgrow the 320px measure and break inside itself ('Optimization / recommendation / s', landing-page#2309 review); with lang="en" a word of ten or more letters hyphenates at a dictionary point instead. */
  hyphens: auto;
  hyphenate-limit-chars: 10 4 4;
}

.md-typeset h1 {
  font-size: 48px;
  margin: 0 0 24px;
}

.md-typeset h2 {
  font-size: 32px;
  margin: 48px 0 16px;
}

.md-typeset h3 {
  font-size: 24px;
  margin: 32px 0 12px;
}

.md-typeset h4 {
  font-size: 16px;
  margin: 24px 0 8px;
}

/* documentation-typography phone headings (767px and below), exactly the
   suite's documentation steps (docs-theme.css): h1 32px (the shared phone
   display scale, which follows the 36px step there), h2 28px; h3 (24px) and
   h4 (16px) declare no phone step and keep their sizes at every width. No
   narrower step exists for documentation headings, so exact titles that
   still wrap badly in the 280-440px narrow-phone article carry declared
   review reasons (.venturi/text-quality-exceptions.json) and stay
   review-required, rather than getting smaller type (typography-quality
   section 3, step 5). */
@media screen and (max-width: 47.9375em) {
  .md-typeset h1 {
    font-size: 32px;
  }

  .md-typeset h2 {
    font-size: 28px;
  }
}

/* Narrow phones reclaim list indentation (typography-quality remediation
   step 1): Material indents each list level 30px (0.625em list margin plus a
   1.25em item margin), which left a nested list 220px of a 280px column. The
   item margin alone still clears the marker. */
@media screen and (max-width: 29.9375em) {
  [dir] .md-typeset :is(ul, ol):not([class]) {
    margin-inline-start: 0;
  }
}

/* Sustained prose keeps a local reading measure (640-704px); titles, tables,
   code, diagrams and the custom index and evidence components keep the full
   article width. */
.md-typeset > p,
.md-typeset > ul,
.md-typeset > ol,
.md-typeset > dl,
.md-typeset > blockquote,
.md-typeset > .admonition,
.md-typeset > details:not(.venturi-catalog__group),
.md-typeset .tabbed-block > p,
.md-typeset .tabbed-block > ul,
.md-typeset .tabbed-block > ol,
.md-typeset .venturi-home-section > p,
.md-typeset .venturi-runbook-step__body > p,
.md-typeset .venturi-runbook-step__body > ul,
.md-typeset .venturi-runbook-step__body > ol {
  max-inline-size: var(--venturi-measure);
}

.md-typeset a {
  color: var(--venturi-blue);
  font-weight: inherit;
  text-decoration: underline;
  text-decoration-color: var(--venturi-link-underline);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.15em;
  transition: color var(--venturi-duration) var(--venturi-ease), text-decoration-color var(--venturi-duration) var(--venturi-ease);
}

/* Inline-code links sit on the code chip's tinted surface. Use the stronger
   accent that clears AA there; callout links keep their inherited palette. */
.md-typeset a:has(code) {
  color: var(--venturi-blue-strong);
}

.md-typeset a:is(:focus, :hover) {
  color: var(--venturi-blue-strong);
  text-decoration-color: currentColor;
}

/* Heading permalinks (design system `ds-docs-anchor`, added to Material's
   headerlink by the toc permalink_class): shown in the link color on heading
   hover and on focus. The anchor sits in the reading-start gutter beside the
   heading's first line rather than after its last glyph: after a full-width
   final line there is no room for it inside the 20px phone gutter, and an
   invisible in-flow anchor changes where a heading wraps. Set at the 16px body
   size, it fits the gutter at every width, text spacing included. */
.md-typeset :is(h1, h2, h3, h4, h5, h6) {
  position: relative;
}

[dir] .md-typeset .headerlink {
  box-sizing: border-box;
  color: var(--venturi-blue);
  font-size: 16px;
  /* Hit area: exactly 24px wide and at least 24px tall (WCAG 2.2 target
     size) around the 11px pilcrow, without moving it. The glyph sits at the
     box's end behind an 8px end padding, and the -4px end margin lays the
     box's last 4px over the heading, so the glyph still ends 4px before the
     heading and the box starts 20px before it. At 767px and below the article
     starts 20px from the viewport edge, so the whole box stays on screen (a
     6px + 7px padding with a -3px margin started it 1px off screen at
     320-390px). A tap on the heading's first 4px follows the same link. */
  inline-size: 24px;
  inset-block-start: 0;
  inset-inline-end: 100%;
  /* 1lh in line-height is the heading's own line height, so the anchor is
     centred on the heading's first line. */
  line-height: 1lh;
  margin: 0;
  margin-inline-end: -4px;
  min-block-size: 24px;
  padding-inline: 0 8px;
  position: absolute;
  text-align: end;
  text-decoration: none;
}

.md-typeset hr {
  border-bottom-color: var(--venturi-hr);
}

.md-typeset strong {
  font-weight: 700;
}

.md-typeset blockquote {
  border-left: 3px solid var(--venturi-border-strong);
  color: var(--venturi-muted);
}

/* Buttons: neutral controls use the active-theme surface; primary actions use
   the documentation accent. Labels may wrap and are never clipped. */
.md-typeset .md-button {
  align-items: center;
  background: var(--venturi-surface);
  border: 1px solid var(--venturi-border-strong);
  border-radius: var(--venturi-r-control);
  box-shadow: none;
  color: var(--venturi-ink);
  display: inline-flex;
  font-size: 16px;
  font-weight: 500;
  justify-content: center;
  line-height: 1.2;
  min-height: 2.75rem;
  padding: 0.55rem 1rem;
  text-decoration: none;
  transition: background-color var(--venturi-duration) var(--venturi-ease), border-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
  /* An action label wraps on whole phrases (typography-quality section 3 step 4; landing-page#2309 DEF-75 review). */
  text-wrap: balance;
}

/* Two or more action buttons are authored as a list, one button per item,
   so the checker measures each label as its own block instead of reading
   the labels as one paragraph (landing-page#2309 review,
   /concepts/architecture/). The list lays out as a row without markers. */
.md-typeset ul:has(> li > .md-button:only-child) {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  list-style: none;
  margin-left: 0;
  padding-left: 0;
}

.md-typeset ul:has(> li > .md-button:only-child) > li {
  margin: 0;
}

.md-typeset .md-button:is(:focus, :hover) {
  background: var(--venturi-accent-wash);
  border-color: var(--venturi-blue);
  color: var(--venturi-ink);
}

.md-typeset .md-button--primary {
  background: var(--venturi-blue);
  border-color: var(--venturi-blue);
  color: #ffffff;
  min-height: 2.75rem;
}

.md-typeset .md-button:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.md-typeset .md-button--primary:is(:hover, :active) {
  background: var(--venturi-blue-strong);
  border-color: var(--venturi-blue-strong);
  color: #ffffff;
}

/* The dark accent is a light teal: its primary actions carry dark text. */
[data-md-color-scheme="slate"] .md-typeset .md-button--primary,
[data-md-color-scheme="slate"] .md-typeset .md-button--primary:is(:hover, :active) {
  color: #1b1b1d;
}

.md-typeset .grid.cards > ul {
  gap: 0.85rem;
}

.md-typeset .grid.cards > ul > li {
  background: var(--venturi-surface);
  border: 1px solid var(--venturi-border-strong);
  border-radius: var(--venturi-r-card);
  box-shadow: none;
  transition: background-color var(--venturi-duration) var(--venturi-ease), border-color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .grid.cards > ul > li:hover,
.md-typeset .grid.cards > ul > li:focus-within {
  background: var(--venturi-accent-wash);
  border-color: var(--venturi-blue);
}

.md-typeset .grid.cards .lg {
  color: var(--venturi-blue);
}

/* Capabilities is a developer task index, not a marketing-card collection.
   One full-width route per workflow keeps destination density even and avoids
   the stranded fifth-card layout at desktop widths. */
.venturi-capability-start {
  align-items: stretch;
  border-block: 1px solid var(--venturi-border);
  display: grid;
  grid-template-columns: max-content repeat(2, minmax(0, 1fr));
  margin: 1.15rem 0 1.75rem;
  max-inline-size: var(--venturi-operating-measure);
  padding: 0;
}

.venturi-capability-start > strong {
  align-items: center;
  display: flex;
  font-size: 14px;
  font-weight: 700;
  padding: 0.7rem 0.85rem 0.7rem 0;
}

.md-typeset .venturi-capability-start > a {
  align-items: center;
  border-left: 1px solid var(--venturi-border);
  color: var(--venturi-blue-strong);
  display: flex;
  font-weight: 500;
  gap: 0.7rem;
  justify-content: space-between;
  min-height: 2.75rem;
  padding: 0.65rem 0.8rem;
  text-decoration: none;
  text-wrap: balance;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .venturi-capability-start > a:is(:hover, :active) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-ink);
}

.md-typeset .venturi-capability-start > a:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.venturi-capability-start__arrow {
  flex: none;
  font-size: 18px;
}

.venturi-capability-index {
  border-top: 1px solid var(--venturi-border-strong);
  display: block;
  margin: 0.7rem 0 1.9rem;
  max-inline-size: var(--venturi-operating-measure);
}

.md-typeset .venturi-capability-row {
  align-items: center;
  border-bottom: 1px solid var(--venturi-border);
  color: var(--venturi-ink);
  display: grid;
  font-weight: 400;
  gap: 0.85rem;
  grid-template-columns: 2.25rem minmax(0, 1fr) 1.5rem;
  min-height: 4.5rem;
  padding: 0.9rem 0.7rem;
  text-decoration: none;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .venturi-capability-row:is(:focus, :hover) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-ink);
}

.md-typeset .venturi-capability-row:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.venturi-capability-row__number {
  align-self: start;
  color: var(--venturi-subtle);
  font-family: var(--venturi-mono);
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}

.venturi-capability-row__copy {
  display: grid;
  gap: 0.22rem;
  line-height: 1.5;
}

.venturi-capability-row__copy strong {
  color: var(--venturi-ink);
  font-family: var(--venturi-display);
  font-size: 18px;
  font-weight: 700;
  text-wrap: balance;
}

.md-typeset .venturi-capability-row__copy > p {
  color: var(--venturi-muted);
  font-size: 15px;
  font-weight: 400;
  margin: 0;
  max-width: 76ch;
  text-wrap: balance;
}

.venturi-capability-row__arrow {
  color: var(--venturi-blue-strong);
  font-size: 20px;
  justify-self: end;
}

.md-typeset .venturi-confidence-bands > ul:not([hidden]),
.md-typeset .venturi-result-contract > ul:not([hidden]) {
  border-block: 1px solid var(--venturi-border);
  display: grid;
  gap: 0;
  list-style: none;
  margin: 0.8rem 0 1.6rem;
  padding: 0;
}

.md-typeset .venturi-confidence-bands > ul:not([hidden]) {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.venturi-confidence-bands > ul > li {
  margin: 0;
  padding: 0.85rem 1rem;
}

.venturi-confidence-bands > ul > li + li {
  border-left: 1px solid var(--venturi-border);
}

.venturi-confidence-bands p,
.venturi-result-contract p {
  margin: 0.25rem 0 0;
}

.venturi-confidence-bands li > strong:first-child,
.venturi-result-contract li > strong:first-child {
  display: block;
}

.venturi-confidence-bands code {
  display: block;
  margin-top: 0.35rem;
  max-width: 100%;
  width: fit-content;
}

.md-typeset .venturi-result-contract > ul:not([hidden]) {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.venturi-result-contract > ul > li {
  margin: 0;
  padding: 0.8rem 1rem;
}

.venturi-result-contract > ul > li:nth-child(even) {
  border-left: 1px solid var(--venturi-border);
}

.venturi-result-contract > ul > li:nth-child(n + 3) {
  border-top: 1px solid var(--venturi-border);
}

/* ---------- Tables (docs table) ---------- */

.md-typeset table:not([class]) {
  background: transparent;
  border: 0;
  border-collapse: collapse;
  border-radius: 0;
  box-shadow: none;
  font-size: 16px;
  line-height: 1.5;
}

.md-typeset table:not([class]) th {
  background: transparent;
  color: var(--venturi-ink);
  font-weight: 700;
  min-width: 0;
}

.md-typeset table:not([class]) td,
.md-typeset table:not([class]) th {
  border: 1px solid var(--venturi-border-strong);
  padding: 12px;
  vertical-align: top;
}

.md-typeset table:not([class]) thead tr,
.md-typeset table:not([class]) tbody tr:nth-child(2n) {
  background: var(--venturi-stripe);
}

.md-typeset table:not([class]) tbody tr:hover {
  background: var(--venturi-stripe);
  box-shadow: none;
}

.md-typeset table:not([class]) td {
  font-variant-numeric: tabular-nums;
}

/* Links on the zebra fill use the hover accent, which keeps 4.5:1 on tints. */
.md-typeset table:not([class]) a {
  color: var(--venturi-blue-strong);
}

.md-typeset__scrollwrap,
.md-typeset .highlight {
  -webkit-overflow-scrolling: touch;
}

/* ---------- Inline and block code (code-block) ---------- */

.md-typeset code {
  background: var(--venturi-surface-alt);
  border: 1px solid var(--venturi-code-inline-border);
  border-radius: var(--venturi-r-card);
  color: inherit;
  font-size: 95%;
  padding: 0.1em 0.3em;
}

/* A long identifier in running text breaks at its own separators (the build
   adds <wbr> after _ / . in long inline tokens) and otherwise only where it
   would overflow its line, including under text-spacing overrides.
   break-word leaves min-content sizing alone, so table columns still size to
   whole tokens and scroll instead. Material clones the chip padding onto
   every line fragment, which pushed a broken chip past the line edge; slice
   keeps the padding at the chip's true start and end only. */
.md-typeset code:not(pre > code) {
  -webkit-box-decoration-break: slice;
  box-decoration-break: slice;
  overflow-wrap: break-word;
}

.md-typeset a code {
  color: inherit;
}

.md-typeset pre > code {
  background: var(--venturi-code-bg);
  border: 0;
  border-radius: 0;
  color: var(--venturi-code-plain);
  font-size: 15px;
  line-height: 1.45;
  padding: 16px;
}

/* The block is rounded by its own surfaces (title bar and code), so nothing
   is clipped; long lines scroll inside the code element. */
.md-typeset .highlight {
  border: 0;
  border-radius: var(--venturi-r-card);
  box-shadow: var(--venturi-shadow-low);
}

.md-typeset .highlight > pre,
.md-typeset .highlight > pre > code {
  border-radius: var(--venturi-r-card);
}

.md-typeset .highlight span.filename + pre,
.md-typeset .highlight span.filename + pre > code {
  border-top-left-radius: 0;
  border-top-right-radius: 0;
}

.md-typeset .highlight > pre {
  -webkit-overflow-scrolling: touch;
}

.md-typeset .highlight span.filename {
  background: var(--venturi-code-bg);
  border-radius: var(--venturi-r-card) var(--venturi-r-card) 0 0;
  border-bottom: 1px solid var(--venturi-code-inline-border);
  color: var(--venturi-muted);
  font-size: 14px;
  font-weight: 500;
}

.md-typeset .highlight .hll {
  background: var(--venturi-code-highlight);
}

/* Keep the code's scrolling viewport outside the copy control's 48px lane.
   The outer pre supplies the background behind the control; long lines remain
   horizontally scrollable inside code at both scroll extremes. */
.md-typeset pre:has(> .md-code__nav) {
  background: var(--venturi-code-bg);
  padding-inline-end: 48px;
}

/* Copy control: a 44px target (touch minimum) around the 18px icon. It stays
   visible, because the suite requires the control to be reachable on touch
   and by keyboard, and Material announces the copied state in its dialog. */
.md-code__nav {
  background: transparent;
  border-radius: var(--venturi-r-card);
  padding: 0;
  right: 4px;
  top: 4px;
}

.md-code__button {
  align-items: center;
  border-radius: var(--venturi-r-card);
  color: var(--venturi-code-plain);
  display: flex;
  height: 44px;
  justify-content: center;
  width: 44px;
}

.md-code__button::after {
  height: 18px;
  width: 18px;
}

.md-code__button:is(:hover, .focus-visible, :focus-visible) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-blue-strong);
}

/* ---------- Admonitions and details (admonition, documentation-details) ---------- */

.md-typeset .admonition,
.md-typeset details:not(.venturi-catalog__group) {
  --venturi-adm-bg: var(--venturi-note-bg);
  --venturi-adm-fg: var(--venturi-note-fg);
  --venturi-adm-border: var(--venturi-note-border);
  background: var(--venturi-adm-bg);
  border: 0;
  border-left: 5px solid var(--venturi-adm-border);
  border-radius: var(--venturi-r-card);
  box-shadow: var(--venturi-shadow-low);
  color: var(--venturi-adm-fg);
  font-size: 16px;
  margin: 0 0 20px;
  padding: 16px;
}

/* Material colors each admonition type with (0,3,0) selectors; the paint rule
   repeats the element class inside :is() so it outranks them for every type
   and reads the variant roles resolved above. */
.md-typeset :is(.admonition, details:not(.venturi-catalog__group)):is(.admonition, details) {
  background: var(--venturi-adm-bg);
  border-color: var(--venturi-adm-border);
  color: var(--venturi-adm-fg);
}

.md-typeset :is(.admonition, details:not(.venturi-catalog__group)):is(.note, .abstract, .summary, .tldr, .example, .quote, .cite) {
  --venturi-adm-bg: var(--venturi-note-bg);
  --venturi-adm-fg: var(--venturi-note-fg);
  --venturi-adm-border: var(--venturi-note-border);
}

.md-typeset :is(.admonition, details:not(.venturi-catalog__group)):is(.info, .todo, .question, .help, .faq) {
  --venturi-adm-bg: var(--venturi-info-bg);
  --venturi-adm-fg: var(--venturi-info-fg);
  --venturi-adm-border: var(--venturi-info-border);
}

.md-typeset :is(.admonition, details:not(.venturi-catalog__group)):is(.tip, .hint, .important, .success, .check, .done) {
  --venturi-adm-bg: var(--venturi-tip-bg);
  --venturi-adm-fg: var(--venturi-tip-fg);
  --venturi-adm-border: var(--venturi-tip-border);
}

.md-typeset :is(.admonition, details:not(.venturi-catalog__group)):is(.warning, .caution, .attention) {
  --venturi-adm-bg: var(--venturi-warning-bg);
  --venturi-adm-fg: var(--venturi-warning-fg);
  --venturi-adm-border: var(--venturi-warning-border);
}

.md-typeset :is(.admonition, details:not(.venturi-catalog__group)):is(.danger, .error, .failure, .fail, .missing, .bug) {
  --venturi-adm-bg: var(--venturi-danger-bg);
  --venturi-adm-fg: var(--venturi-danger-fg);
  --venturi-adm-border: var(--venturi-danger-border);
}

.md-typeset .admonition:focus-within,
.md-typeset details:not(.venturi-catalog__group):focus-within {
  box-shadow: var(--venturi-shadow-low);
}

/* Titles: 14px bold with label tracking in sentence case (never icon-only,
   never all caps in long-form technical material). The icon takes the
   callout's foreground so it never relies on a low-contrast tint. */
.md-typeset :is(.admonition, details:not(.venturi-catalog__group)) > :is(.admonition-title, summary) {
  background: transparent;
  border: 0;
  color: inherit;
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0.02em;
  line-height: 1.25;
  margin: 0 0 8px;
  padding: 2px 0 2px 30px;
  text-wrap: balance;
}

.md-typeset details:not(.venturi-catalog__group) > summary {
  align-items: center;
  display: flex;
  margin: -12px -16px -12px -16px;
  min-height: 44px;
  padding: 12px 44px 12px 46px;
}

.md-typeset details:not(.venturi-catalog__group)[open] > summary {
  margin-bottom: 8px;
}

.md-typeset :is(.admonition, details:not(.venturi-catalog__group)) > :is(.admonition-title, summary)::before {
  background-color: currentColor;
  height: 20px;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 20px;
}

.md-typeset details:not(.venturi-catalog__group) > summary::before {
  left: 16px;
}

.md-typeset details:not(.venturi-catalog__group) > summary::after {
  background-color: currentColor;
  right: 16px;
  top: 50%;
  transform: translateY(-50%) rotate(0deg);
}

.md-typeset details:not(.venturi-catalog__group)[open] > summary::after {
  transform: translateY(-50%) rotate(90deg);
}

.md-typeset .admonition > :last-child,
.md-typeset details:not(.venturi-catalog__group) > :last-child {
  margin-bottom: 0;
}

.md-typeset .admonition a,
.md-typeset details:not(.venturi-catalog__group) a {
  color: inherit;
  text-decoration: underline;
  text-decoration-color: currentColor;
}

.md-typeset .admonition code,
.md-typeset details:not(.venturi-catalog__group) code {
  background: color-mix(in srgb, var(--venturi-surface-alt) 60%, transparent);
}

/* Task-list checkmarks report verification outcomes ("verify.sh exited 0");
   they use the success role instead of Material's off-palette green. */
.md-typeset [type="checkbox"]:checked + .task-list-indicator::before {
  background-color: var(--venturi-teal);
}

/* ---------- Tabs (docs tabs) ---------- */

.md-typeset .tabbed-set {
  margin: 1.1rem 0;
}

.md-typeset .tabbed-labels {
  box-shadow: inset 0 -1px 0 var(--venturi-border-strong);
  gap: 0;
}

/* A tab strip scrolls sideways on narrow screens. The build makes it a
   labelled, keyboard-focusable region (scripts/mkdocs_hooks.py, #267) so a
   keyboard user can reach and scroll it; this is its focus indicator. */
.md-typeset .tabbed-labels[role="region"]:focus-visible {
  border-radius: 2px;
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.md-typeset .tabbed-labels > label {
  border-bottom: 3px solid transparent;
  border-radius: var(--venturi-r-card) var(--venturi-r-card) 0 0;
  color: var(--venturi-muted);
  font-size: 16px;
  font-weight: 700;
  padding: 16px;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

/* Material adds link wrappers asynchronously. Transfer the existing padding
   to the link so enhancement does not add a second vertical padding layer or
   move a restored article position; unlinked/no-script labels keep their size. */
.md-typeset .tabbed-labels--linked > label {
  padding: 0;
}

.md-typeset .tabbed-labels--linked > label > a {
  padding: 16px;
}

.md-typeset .tabbed-labels > label:hover {
  background: var(--venturi-accent-wash);
  color: var(--venturi-ink);
}

/* Keyboard focus on a content tab. Each tab is a visually hidden radio whose
   visible label sits in the strip, so the label carries the focus contract's
   2px ring (Material only recolours its text). The strip is a scroll
   container that clips anything outside a label's box, so the ring is drawn
   inside the label with a 2px gap to its edge (offset -4px) rather than
   outside it. Material pairs radio N with label N for up to 20 tabs; the same
   range is covered here. */
.md-typeset .tabbed-set > input:nth-child(1):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(1),
.md-typeset .tabbed-set > input:nth-child(2):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(2),
.md-typeset .tabbed-set > input:nth-child(3):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(3),
.md-typeset .tabbed-set > input:nth-child(4):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(4),
.md-typeset .tabbed-set > input:nth-child(5):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(5),
.md-typeset .tabbed-set > input:nth-child(6):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(6),
.md-typeset .tabbed-set > input:nth-child(7):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(7),
.md-typeset .tabbed-set > input:nth-child(8):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(8),
.md-typeset .tabbed-set > input:nth-child(9):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(9),
.md-typeset .tabbed-set > input:nth-child(10):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(10),
.md-typeset .tabbed-set > input:nth-child(11):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(11),
.md-typeset .tabbed-set > input:nth-child(12):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(12),
.md-typeset .tabbed-set > input:nth-child(13):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(13),
.md-typeset .tabbed-set > input:nth-child(14):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(14),
.md-typeset .tabbed-set > input:nth-child(15):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(15),
.md-typeset .tabbed-set > input:nth-child(16):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(16),
.md-typeset .tabbed-set > input:nth-child(17):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(17),
.md-typeset .tabbed-set > input:nth-child(18):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(18),
.md-typeset .tabbed-set > input:nth-child(19):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(19),
.md-typeset .tabbed-set > input:nth-child(20):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(20) {
  outline: 2px solid var(--venturi-focus);
  outline-offset: -4px;
}

@media (forced-colors: active) {
  .md-typeset .tabbed-set > input:nth-child(1):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(1),
  .md-typeset .tabbed-set > input:nth-child(2):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(2),
  .md-typeset .tabbed-set > input:nth-child(3):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(3),
  .md-typeset .tabbed-set > input:nth-child(4):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(4),
  .md-typeset .tabbed-set > input:nth-child(5):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(5),
  .md-typeset .tabbed-set > input:nth-child(6):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(6),
  .md-typeset .tabbed-set > input:nth-child(7):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(7),
  .md-typeset .tabbed-set > input:nth-child(8):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(8),
  .md-typeset .tabbed-set > input:nth-child(9):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(9),
  .md-typeset .tabbed-set > input:nth-child(10):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(10),
  .md-typeset .tabbed-set > input:nth-child(11):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(11),
  .md-typeset .tabbed-set > input:nth-child(12):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(12),
  .md-typeset .tabbed-set > input:nth-child(13):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(13),
  .md-typeset .tabbed-set > input:nth-child(14):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(14),
  .md-typeset .tabbed-set > input:nth-child(15):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(15),
  .md-typeset .tabbed-set > input:nth-child(16):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(16),
  .md-typeset .tabbed-set > input:nth-child(17):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(17),
  .md-typeset .tabbed-set > input:nth-child(18):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(18),
  .md-typeset .tabbed-set > input:nth-child(19):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(19),
  .md-typeset .tabbed-set > input:nth-child(20):is(:focus-visible, .focus-visible) ~ .tabbed-labels > label:nth-child(20) {
    outline-color: Highlight;
  }
}

.md-typeset .tabbed-set > input:checked + .tabbed-labels > label,
.js .md-typeset .tabbed-labels > label.md-tabbed-active,
.md-typeset .tabbed-alternate.tabbed-set > input:checked + label {
  border-bottom-color: var(--venturi-blue);
  color: var(--venturi-blue-strong);
}

/* Material draws the selected tab with a moving indicator bar; the 3px
   bottom border above is the documentation-tabs marker instead. */
.js .md-typeset .tabbed-labels::before {
  background: var(--venturi-blue);
  height: 3px;
}

.md-typeset .tabbed-content {
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 16px 0 0;
}

/* The tab-strip scroll buttons were 18px circles; 44px targets. */
.md-typeset .tabbed-control {
  width: 44px;
}

/* Material disables the hidden overlay; its child otherwise restores hits. */
.md-typeset .tabbed-control[hidden] .tabbed-button {
  pointer-events: none;
}

.md-typeset .tabbed-button {
  height: 44px;
  margin-top: 0;
  width: 44px;
}

.md-typeset .tabbed-button::after {
  margin: 13px;
  height: 18px;
  width: 18px;
}

/* Quickstart: expose the operating contract as a compact summary and keep
   each step's success/recovery evidence beside the action it qualifies. This
   uses the wide content rail for information hierarchy, not longer lines. */
.venturi-quickstart-summary {
  border-block: 1px solid var(--venturi-border-strong);
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(11rem, 0.9fr);
  margin: 0 0 1.6rem;
}

.venturi-quickstart-summary__item {
  min-width: 0;
  padding: 0.85rem 1rem;
}

.venturi-quickstart-summary__item + .venturi-quickstart-summary__item {
  border-left: 1px solid var(--venturi-border);
}

.venturi-quickstart-summary__label,
.venturi-quickstart-summary__value,
.venturi-quickstart-summary__detail {
  display: block;
}

.venturi-quickstart-summary__label {
  color: var(--venturi-muted);
  font-size: 14px;
  font-weight: 700;
  letter-spacing: 0;
  margin-bottom: 0.3rem;
}

.venturi-quickstart-summary__value {
  color: var(--venturi-ink);
  font-size: 18px;
  font-weight: 700;
  line-height: 1.35;
  text-wrap: balance;
}

.venturi-quickstart-summary__detail {
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.5;
  margin-top: 0.25rem;
  text-wrap: balance;
}

.md-typeset .venturi-quickstart-summary__action {
  align-items: center;
  background: var(--venturi-blue);
  color: #ffffff;
  display: flex;
  font-weight: 500;
  gap: 0.75rem;
  justify-content: space-between;
  min-height: 2.75rem;
  padding: 0.85rem 1rem;
  text-decoration: none;
  transition: background-color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .venturi-quickstart-summary__action:is(:hover, :active) {
  background: var(--venturi-blue-strong);
  color: #ffffff;
}

[data-md-color-scheme="slate"] .md-typeset .venturi-quickstart-summary__action,
[data-md-color-scheme="slate"] .md-typeset .venturi-quickstart-summary__action:is(:hover, :active) {
  color: #1b1b1d;
}

.md-typeset .venturi-quickstart-summary__action:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.venturi-target-contract {
  border-left: 3px solid var(--venturi-blue);
  margin: 0 0 1.5rem;
  max-width: var(--venturi-measure);
  padding: 0.15rem 0 0.15rem 1rem;
}

.venturi-target-contract p {
  margin: 0;
}

.venturi-target-contract p + p {
  margin-top: 0.65rem;
}

.venturi-milestone-compare {
  border-block: 1px solid var(--venturi-border-strong);
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin: 0.8rem 0 2rem;
}

.venturi-milestone-compare > div {
  min-width: 0;
  padding: 0.85rem 1rem;
}

.venturi-milestone-compare > div + div {
  border-left: 1px solid var(--venturi-border);
}

.venturi-milestone-compare strong,
.venturi-milestone-compare span {
  display: block;
}

.venturi-milestone-compare strong {
  color: var(--venturi-ink);
  font-size: 16px;
  font-weight: 700;
  text-wrap: balance;
}

.venturi-milestone-compare span {
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.52;
  margin-top: 0.3rem;
  text-wrap: balance;
}

/* Reserve inline code's end decoration inside the balanced description (see
   the Markdown short-copy rule above). */
.venturi-milestone-compare span:has(code) {
  padding-inline-end: 0.4em;
}

.venturi-runbook {
  border-bottom: 1px solid var(--venturi-border-strong);
  counter-reset: venturi-runbook-step;
  margin-top: 0.8rem;
}

.venturi-runbook-step {
  border-top: 1px solid var(--venturi-border-strong);
  counter-increment: venturi-runbook-step;
  display: grid;
  gap: 1.15rem 1.75rem;
  grid-template-columns: minmax(0, 1.65fr) minmax(15rem, 0.75fr);
  padding: 1.35rem 0;
}

.md-typeset .venturi-runbook-step > h2 {
  grid-column: 1 / -1;
  margin: 0;
  padding-left: 3.1rem;
}

.md-typeset .venturi-runbook-step > h2::before {
  color: var(--venturi-blue-strong);
  content: counter(venturi-runbook-step, decimal-leading-zero);
  font-family: var(--venturi-mono);
  font-size: 15px;
  font-variant-numeric: tabular-nums;
  font-weight: 500;
  left: 0.1rem;
  line-height: 1.55;
  position: absolute;
  top: 0.4em;
}

.venturi-runbook-step__role {
  color: var(--venturi-muted);
  font-size: 15px;
  grid-column: 1 / -1;
  line-height: 1.5;
  margin: -0.75rem 0 0 3.1rem;
}

/* Phones: the step number sits above its title, so the title uses the whole
   article width instead of a column beside the number. */
@media screen and (max-width: 29.9375em) {
  .md-typeset .venturi-runbook-step > h2 {
    padding-left: 0;
  }

  .md-typeset .venturi-runbook-step > h2::before {
    display: block;
    margin-bottom: 4px;
    position: static;
  }

  .venturi-runbook-step__role {
    margin-left: 0;
  }
}

.venturi-runbook-step__body {
  min-width: 0;
}

.venturi-runbook-step__body > :first-child,
.venturi-runbook-step__proof > :first-child {
  margin-top: 0;
}

.venturi-runbook-step__body > :last-child,
.venturi-runbook-step__proof > :last-child {
  margin-bottom: 0;
}

.venturi-runbook-step__proof {
  align-self: start;
  background: var(--venturi-code-bg);
  border-left: 3px solid var(--venturi-border-strong);
  color: var(--venturi-muted);
  font-size: 16px;
  line-height: 1.55;
  min-width: 0;
  padding: 0.8rem 0.95rem;
}

.venturi-runbook-step__proof a {
  color: var(--venturi-blue-strong);
}

.venturi-runbook-step__proof p {
  margin: 0;
}

.venturi-runbook-step__proof p + p {
  border-top: 1px solid var(--venturi-border);
  margin-top: 0.7rem;
  padding-top: 0.7rem;
}

.venturi-runbook-step__proof strong {
  color: var(--venturi-ink);
  display: block;
  font-size: 14px;
  margin-bottom: 0.15rem;
}

@container venturi-content (max-width: 56rem) {
  .venturi-quickstart-summary {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .md-typeset .venturi-quickstart-summary__action {
    grid-column: 1 / -1;
  }
}

@container venturi-content (max-width: 42rem) {
  .venturi-quickstart-summary,
  .venturi-milestone-compare,
  .venturi-runbook-step {
    grid-template-columns: 1fr;
  }

  .venturi-quickstart-summary__item + .venturi-quickstart-summary__item,
  .venturi-milestone-compare > div + div {
    border-left: 0;
    border-top: 1px solid var(--venturi-border);
  }

  .md-typeset .venturi-quickstart-summary__action {
    grid-column: auto;
  }

  .venturi-runbook-step {
    gap: 0.9rem;
  }
}

/* On phone layouts, retain the 3 decision facts while dropping their repeated
   explanatory lines. The runbook immediately below carries the full detail;
   this keeps the first executable action in the initial viewport instead of
   presenting a wall of summary copy. */
@media screen and (max-width: 38em) {
  .venturi-quickstart-summary__item {
    padding: 0.65rem 0.75rem;
  }

  .venturi-quickstart-summary__label {
    margin-bottom: 0.15rem;
  }

  .venturi-quickstart-summary__detail {
    display: none;
  }

  .md-typeset .venturi-quickstart-summary__action {
    padding: 0.7rem 0.75rem;
  }
}

/* Homepage: a compact task index and explanatory rails, not a marketing hero
   or card grid. The same row contract serves task and role entry points. */
.venturi-home-lead {
  color: var(--venturi-muted);
  font-size: 18px;
  line-height: 1.6;
  margin: -8px 0 32px;
  max-inline-size: var(--venturi-measure);
  text-wrap: pretty;
}

.venturi-home-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
}

.venturi-home-section {
  min-width: 0;
}

.venturi-index {
  border-top: 1px solid var(--venturi-border-strong);
  display: block;
  margin: 0.7rem 0 2rem;
}

/* The action sits on the label's last line (last-baseline alignment), so a
   wrapped label and its action read as one row and the action never strands
   on a line of its own. */
.md-typeset .venturi-index__row {
  align-items: last baseline;
  border-bottom: 1px solid var(--venturi-border);
  color: var(--venturi-ink);
  display: grid;
  gap: 1rem;
  grid-template-columns: minmax(0, 1fr) max-content;
  min-height: 3.35rem;
  padding: 0.78rem 0.35rem;
  text-decoration: none;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .venturi-index__row:is(:hover, :active) {
  background: var(--venturi-accent-wash);
  color: var(--venturi-ink);
}

.md-typeset .venturi-index__row:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.venturi-index__label {
  font-weight: 500;
  line-height: 1.5;
  min-width: 0;
  text-wrap: pretty;
}

.venturi-index__label > strong {
  color: var(--venturi-ink);
  font-weight: 700;
}

/* The action column is sized max-content beside the label, so the action
   keeps its full width without a no-wrap override; on phones it stacks. */
.venturi-index__action {
  color: var(--venturi-blue-strong);
  font-size: 14px;
  font-weight: 500;
  text-wrap: balance;
}

.md-typeset ol.venturi-system-map:not([hidden]) {
  display: grid;
}

.venturi-system-map {
  border-block: 1px solid var(--venturi-border-strong);
  gap: 0;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  list-style: none;
  margin: 0.7rem 0 1rem;
  padding: 0;
}

.md-typeset .venturi-system-map > li {
  margin: 0;
  min-width: 0;
  padding: 0.85rem;
}

.md-typeset .venturi-system-map > li:nth-child(even) {
  border-left: 1px solid var(--venturi-border);
}

.md-typeset .venturi-system-map > li:nth-child(n + 3) {
  border-top: 1px solid var(--venturi-border);
}

.venturi-system-map strong,
.venturi-system-map span {
  display: block;
}

.venturi-system-map strong {
  color: var(--venturi-ink);
  font-size: 16px;
  font-weight: 700;
  line-height: 1.35;
  margin-bottom: 0.35rem;
  text-wrap: balance;
}

.venturi-system-map span {
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.5;
  text-wrap: balance;
}

.venturi-state-key {
  border-block: 1px solid var(--venturi-border-strong);
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin: 0.9rem 0 1.6rem;
}

.venturi-state-key > div {
  margin: 0;
  padding: 0.8rem;
}

.venturi-state-key > div:nth-child(even) {
  border-left: 1px solid var(--venturi-border);
}

.venturi-state-key > div:nth-child(n + 3) {
  border-top: 1px solid var(--venturi-border);
}

.venturi-state-key dt {
  color: var(--venturi-ink);
  font-size: 15px;
  font-weight: 700;
}

.md-typeset .venturi-state-key dd {
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.5;
  margin: 0.25rem 0 0;
  text-wrap: pretty;
}

/* Back-to-top (navigation.top): a quiet outlined pill instead of elevation. */
.md-top {
  background: var(--venturi-surface);
  border: 1px solid var(--venturi-border-strong);
  box-shadow: var(--venturi-shadow-quiet);
  color: var(--venturi-muted);
  font-size: 14px;
  min-height: 44px;
}

.md-top:is(:focus, :hover) {
  background: var(--venturi-surface);
  border-color: var(--venturi-blue);
  color: var(--venturi-ink);
}

/* ---------- Footer: pagination above the documentation-footer band ---------- */

.md-footer {
  background: transparent;
  color: var(--venturi-ink);
}

/* Material shows the pager with ".md-footer__inner:not([hidden]) { display:
   flex }"; the same selector shape switches it to the pagination grid. */
.venturi-pagination:not([hidden]) {
  display: grid;
}

.venturi-pagination {
  gap: 16px;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  padding: 16px 20px;
}

@media screen and (min-width: 48em) {
  .venturi-pagination {
    padding-inline: 24px;
  }
}

@media screen and (min-width: 76.25em) {
  .venturi-pagination {
    padding-left: calc(var(--venturi-sidebar-width) + 24px);
  }
}

@media screen and (min-width: 80em) {
  .venturi-pagination {
    padding-right: calc(var(--venturi-toc-width) + 24px);
  }
}

.md-footer__link {
  align-items: flex-start;
  background: var(--venturi-surface);
  border: 1px solid var(--venturi-border-strong);
  border-radius: var(--venturi-r-card);
  color: var(--venturi-blue-strong);
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin: 0;
  max-width: none;
  min-height: 44px;
  min-width: 0;
  opacity: 1;
  overflow: visible;
  padding: 16px;
  transition: border-color var(--venturi-duration) var(--venturi-ease);
  width: auto;
}

.venturi-pagination .md-footer__link {
  margin: 0;
}

.md-footer__link--prev {
  grid-column: 1;
}

.md-footer__link--next {
  align-items: flex-end;
  grid-column: 2;
  margin: 0;
  text-align: right;
}

.md-footer__link:is(:focus, :hover) {
  border-color: var(--venturi-blue);
  opacity: 1;
}

.md-footer__direction {
  color: var(--venturi-muted);
  font-size: 14px;
  font-weight: 500;
  left: auto;
  line-height: 1.4;
  opacity: 1;
  padding: 0;
  position: static;
  right: auto;
}

.md-footer__title {
  color: var(--venturi-blue-strong);
  flex-grow: 0;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.35;
  margin: 0;
  max-width: none;
  overflow: visible;
  padding: 0;
  text-wrap: balance;
}

.md-footer__link--prev .md-footer__title {
  display: block;
}

/* A lone previous or next link spans the pagination row. */
.venturi-pagination > .md-footer__link:only-child {
  grid-column: 1 / -1;
}

@media screen and (max-width: 47.9375em) {
  .venturi-pagination {
    grid-template-columns: minmax(0, 1fr);
  }

  .md-footer__link--prev,
  .md-footer__link--next {
    grid-column: 1;
  }
}

/* 320px-class phones: the two links become full-width rows divided by a
   rule, returning the card frame's 34px to the page titles. */
@media screen and (max-width: 22.4375em) {
  .venturi-pagination {
    gap: 0;
  }

  .venturi-pagination .md-footer__link {
    border-radius: 0;
    border-width: 1px 0 0;
    padding: 12px 0;
  }
}

/* The shared public footer uses the page surface in light appearance.
   The user's explicit dark preference retains readable documentation colors. */
.md-footer-meta.venturi-docs-footer {
  --venturi-focus: var(--venturi-footer-text);
  background: var(--venturi-footer-bg);
  border-top: 1px solid var(--venturi-border-strong);
  color: var(--venturi-footer-text);
}

.venturi-docs-footer__inner {
  display: block;
  padding: 16px 20px 12px;
}

@media screen and (min-width: 48em) {
  .venturi-docs-footer__inner { padding-inline: 24px; }
}

@media screen and (min-width: 76.25em) {
  .venturi-docs-footer__inner { padding-inline: 32px; }
}

.venturi-docs-footer__grid {
  display: grid;
  gap: 8px 24px;
  grid-template-columns: minmax(192px, 0.45fr) minmax(0, 1.55fr);
}

.venturi-docs-footer__groups {
  display: grid;
  gap: 12px 24px;
  grid-template-columns: minmax(0, 2fr) repeat(2, minmax(0, 1fr));
}

.venturi-docs-footer__brand {
  align-items: center;
  color: var(--venturi-footer-text);
  display: inline-flex;
  min-height: 44px;
  min-width: 44px;
}

.venturi-docs-footer__summary {
  color: var(--venturi-footer-title);
  font-size: 14px;
  line-height: 1.5;
  margin: 0;
  text-wrap: balance;
}

.md-footer-meta .venturi-docs-footer__title {
  color: var(--venturi-footer-title);
  font-size: 14px;
  font-weight: 400;
  line-height: 1.5;
  margin: 0 0 4px;
}

.venturi-docs-footer ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.venturi-docs-footer__group ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0 16px;
}

.venturi-docs-footer__group li {
  flex: 1 0 calc(50% - 16px);
}

.venturi-docs-footer__group a {
  align-items: center;
  color: var(--venturi-footer-text);
  display: inline-flex;
  font-size: 14px;
  font-weight: 500;
  line-height: 1.5;
  max-width: 100%;
  min-height: 44px;
  min-width: 44px;
  overflow-wrap: anywhere;
  text-decoration: none;
  text-wrap: pretty;
}

.venturi-docs-footer a:is(:hover, :focus-visible) {
  color: var(--venturi-footer-hover);
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.venturi-docs-footer__row {
  align-items: center;
  border-top: 1px solid var(--venturi-border-strong);
  display: flex;
  flex-wrap: wrap;
  gap: 0 16px;
  margin-top: 8px;
}

.venturi-docs-footer__copyright {
  color: var(--venturi-footer-title);
  font-size: 12px;
  font-weight: 500;
  line-height: 1.5;
  margin: 0;
}

.venturi-docs-footer__row a {
  align-items: center;
  color: var(--venturi-footer-text);
  display: inline-flex;
  font-size: 12px;
  font-weight: 500;
  line-height: 1.5;
  min-height: 44px;
  min-width: 44px;
  overflow-wrap: anywhere;
  text-decoration: none;
  text-wrap: pretty;
}

.venturi-docs-footer__top {
  gap: 4px;
  margin-inline-start: auto;
}

.venturi-docs-footer__legal {
  flex: 1 1 auto;
  min-width: 0;
}

.venturi-docs-footer__legal ul {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: 0 16px;
}

@media screen and (max-width: 63.9375em) {
  .venturi-docs-footer__grid { grid-template-columns: minmax(0, 1fr); }
  .venturi-docs-footer__about {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: 0 16px;
  }
}

/* Share the last legal row once there is room beside the link group. */
@media screen and (min-width: 35.0625em) {
  .venturi-docs-footer__legal { flex: 1 1 0; }
  .venturi-docs-footer__top { align-self: flex-end; }
}

/* The public footer keeps its seven Product destinations in two rows.
   Content-sized tracks prevent Login from occupying a row by itself. */
@media screen and (min-width: 64em) {
  .venturi-docs-footer__group li { min-width: max-content; }
  .venturi-docs-footer__group:first-child ul {
    display: grid;
    grid-template-columns: repeat(4, auto);
  }
  .venturi-docs-footer__group:first-child li { min-width: 0; }
}

/* Keep Product at its content width throughout desktop sizes so enlarged
   labels cannot split when a proportional track would become narrower.
   The other groups retain at least the width of their longest word. */
@media screen and (min-width: 64em) {
  .venturi-docs-footer__groups {
    grid-template-columns: minmax(0, max-content) repeat(2, minmax(min-content, 1fr));
  }
}

/* Group labels retain their own rail through compact tablet widths.
   One wrapping layout avoids abrupt height changes inside that range. */
@media screen and (max-width: 63.9375em) {
  .venturi-docs-footer__groups { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .venturi-docs-footer__group {
    align-items: start;
    display: grid;
    gap: 12px;
    grid-template-columns: minmax(64px, max-content) minmax(0, 1fr);
  }
  .md-footer-meta .venturi-docs-footer__title {
    align-items: center;
    display: flex;
    margin: 0;
    min-height: 44px;
  }
  .venturi-docs-footer__group ul { display: flex; flex-wrap: wrap; gap: 0 12px; }
  .venturi-docs-footer__group li { flex: 0 1 auto; min-width: 0; }
}

/* Keep copyright and Sitemap together. Give each legal label its natural
   width so narrow screens wrap whole links instead of isolated final words. */
@media screen and (max-width: 28em) {
  .venturi-docs-footer__legal li:nth-child(n+3) {
    flex: 0 1 auto;
    max-width: 100%;
    width: max-content;
  }
  .venturi-docs-footer__legal a { max-width: 100%; }
}

/* ---------- Drawer (compact and phone navigation) ---------- */

@media screen and (max-width: 76.234375em) {
  /* A closed drawer leaves the focus and reading order: its ~135 off-canvas
     links were tab stops before the content at every compact width. The
     visibility change waits for the slide-out to finish. */
  [data-md-toggle="drawer"]:not(:checked) ~ .md-container .md-sidebar--primary {
    transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), box-shadow 250ms, visibility 0s 250ms;
    visibility: hidden;
  }

  [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
    transition: transform 250ms cubic-bezier(0.1, 0.7, 0.1, 1), box-shadow 250ms, visibility 0s;
    visibility: visible;
  }

  .md-sidebar--primary {
    background: var(--venturi-canvas);
  }

  .md-overlay {
    background-color: var(--venturi-scrim);
  }

  /* Mobile drawer: Material colors the active link and section title with
     --md-primary-fg-color, which this theme sets to the header surface —
     leaving the active item near-invisible. Pin drawer text back to the
     token palette. */
  .md-nav--primary .md-nav__title {
    background: var(--venturi-surface);
    color: var(--venturi-ink);
  }

  .md-nav--primary .md-nav__title[for="__drawer"] {
    align-items: center;
    display: flex;
    font-size: 16px;
    font-weight: 500;
    gap: 8px;
  }

  .md-nav--primary .md-nav__title .md-nav__icon {
    color: var(--venturi-ink);
  }

  .md-nav--primary .md-nav__item .md-nav__link--active,
  .md-nav--primary .md-nav__link--active {
    color: var(--venturi-navy);
  }

  .md-nav--primary .md-nav__item .md-nav__link--active .md-nav__icon,
  .md-nav--primary .md-nav__button {
    color: var(--venturi-muted);
  }

  .md-nav__button.md-logo {
    color: var(--venturi-ink);
  }

  /* Index rows split into link + toggle; the toggle is the only way to expand
     the group without navigating, so it gets the 44px touch floor. */
  .md-nav--primary .md-nav__container > label.md-nav__link {
    min-width: 2.75rem;
  }
}

.venturi-nav__context {
  color: var(--venturi-muted);
  font-family: var(--venturi-sans);
}

@media screen and (max-width: 59.9375em) {
  .md-header {
    padding-top: var(--venturi-safe-top);
  }

  .md-header__inner {
    min-height: 54px;
  }

  .md-header__button.md-logo {
    margin: 0 2px;
    padding: 10px 6px;
  }

  .venturi-header__links {
    display: none;
  }

  .md-search__form {
    min-height: 2.75rem;
  }

  /* The search hit area must fit its header slot. Material's absolute
     overlay previously extended three pixels beyond a 390px viewport. */
  .md-search__overlay {
    height: 44px;
    width: 44px;
  }

  .md-nav__item .md-nav__link {
    align-items: center;
    display: flex;
    min-height: 2.75rem;
    padding-bottom: 0.55rem;
    padding-top: 0.55rem;
  }

  .md-sidebar--primary .md-sidebar__scrollwrap {
    padding-bottom: max(1rem, var(--venturi-safe-bottom));
  }

  /* Breadcrumbs become 44px touch targets while staying in one quiet row. */
  .md-path__link {
    min-height: 44px;
  }
}

/* The header context label yields its space to controls on phones; the
   lockup still identifies the site, and the title region keeps growing so
   the controls stay at the end of the bar. */
@media screen and (max-width: 38em) {
  .md-header__title .md-header__topic {
    display: none;
  }
}

@media screen and (max-width: 38em) {
  .venturi-capability-start {
    grid-template-columns: 1fr;
    margin: 0.85rem 0 1.35rem;
  }

  .venturi-capability-start > strong {
    padding: 0.65rem 0;
  }

  .md-typeset .venturi-capability-start > a {
    border-left: 0;
    border-top: 1px solid var(--venturi-border);
    min-height: 2.75rem;
    padding: 0.65rem 0.15rem;
  }

  /* The number, title and arrow share the first row; the description
     spans the full row beneath them instead of a narrow middle column. */
  .md-typeset .venturi-capability-row {
    align-items: baseline;
    gap: 0.35rem 0.65rem;
    grid-template-columns: 1.75rem minmax(0, 1fr) 1.15rem;
    min-height: 4.75rem;
    padding: 0.8rem 0.25rem;
  }

  .venturi-capability-row__copy {
    display: contents;
  }

  .venturi-capability-row__copy strong {
    grid-column: 2;
    grid-row: 1;
  }

  .md-typeset .venturi-capability-row__copy > p {
    grid-column: 1 / -1;
    grid-row: 2;
  }

  .venturi-capability-row__arrow {
    grid-column: 3;
    grid-row: 1;
  }

  .md-typeset .venturi-confidence-bands > ul:not([hidden]),
  .md-typeset .venturi-result-contract > ul:not([hidden]) {
    grid-template-columns: 1fr;
  }

  .venturi-confidence-bands > ul > li,
  .venturi-result-contract > ul > li {
    border-left: 0 !important;
    padding: 0.75rem 0.2rem;
  }

  .venturi-confidence-bands > ul > li + li,
  .venturi-result-contract > ul > li + li {
    border-top: 1px solid var(--venturi-border);
  }

  .md-typeset code:not(pre code) {
    border-radius: 4px;
    overflow-wrap: anywhere;
    padding: 0.04em 0.24em;
    word-break: break-word;
  }

  /* Inside tables the anywhere-wrap above fractures copyable identifiers
     (contact@ventu/ri.systems, export:creat/e). Tables already live in their
     own horizontal scroll container, so tokens wrap only as whole units. */
  .md-typeset table:not([class]) code {
    overflow-wrap: normal;
    word-break: normal;
  }

  .md-typeset .highlight,
  .md-typeset__scrollwrap {
    margin-left: 0 !important;
    margin-right: 0 !important;
    max-width: 100%;
  }

  .md-typeset .highlight > pre,
  .md-typeset__scrollwrap {
    overflow-x: auto;
  }

  /* Reclaim the table's inherited bleed padding once the wrapper no longer
     bleeds: the cells get the full article width. */
  .md-typeset__table {
    padding: 0;
  }

  .venturi-system-map,
  .venturi-state-key {
    grid-template-columns: 1fr;
  }

  .md-typeset .venturi-system-map > li,
  .venturi-state-key > div {
    border-left: 0;
  }

  .md-typeset .venturi-system-map > li:nth-child(even) {
    border-left: 0;
  }

  .venturi-state-key > div:nth-child(even) {
    border-left: 0;
  }

  .md-typeset .venturi-system-map > li + li,
  .venturi-state-key > div + div {
    border-left: 0;
    border-top: 1px solid var(--venturi-border);
  }

  .md-typeset .venturi-index__row {
    gap: 0.75rem;
    min-height: 3.6rem;
    padding-inline: 0.15rem;
  }

}

/* Narrow phones: the title also takes the arrow's column and steps to the
   heading-16 token, so the exact capability titles keep one line beside
   their number (the arrow is aria-hidden decoration; the whole row stays
   the link, with its hover and focus treatment). */
@media screen and (max-width: 29.9375em) {
  .md-typeset .venturi-capability-row {
    grid-template-columns: 1.75rem minmax(0, 1fr);
  }

  .venturi-capability-row__arrow {
    display: none;
  }

  .venturi-capability-row__copy strong {
    font-size: 16px;
  }
}

/* Connector catalog: a compact factual snapshot, explicit state comparison,
   native disclosure groups, and compact row boundaries. */
.venturi-catalog-snapshot {
  border-block: 1px solid var(--venturi-border-strong);
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  margin: 0.9rem 0 1.8rem;
}

.venturi-catalog-snapshot__item {
  min-width: 0;
  padding: 0.8rem 0.9rem;
}

.venturi-catalog-snapshot__item + .venturi-catalog-snapshot__item {
  border-left: 1px solid var(--venturi-border);
}

.venturi-catalog-snapshot__item strong,
.venturi-catalog-snapshot__item span {
  display: block;
}

.venturi-catalog-snapshot__item strong {
  color: var(--venturi-ink);
  font-family: var(--venturi-display);
  font-size: 24px;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  line-height: 1.1;
}

.venturi-catalog-snapshot__item span {
  color: var(--venturi-muted);
  font-size: 14px;
  line-height: 1.4;
  margin-top: 0.3rem;
  text-wrap: balance;
}

.venturi-catalog-status-guide {
  border-block: 1px solid var(--venturi-border-strong);
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  margin: 0.8rem 0 0;
  max-width: var(--venturi-operating-measure);
}

.venturi-catalog-status-guide > div {
  min-width: 0;
  padding: 0.85rem 1rem;
}

.venturi-catalog-status-guide > div + div {
  border-left: 1px solid var(--venturi-border);
}

.venturi-catalog-status-guide p {
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.5;
  margin: 0.6rem 0 0;
}

.md-typeset .venturi-catalog-status-note {
  border-bottom: 1px solid var(--venturi-border);
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.55;
  margin: 0;
  max-width: var(--venturi-operating-measure);
  padding: 0.75rem 1rem;
}

/* The three catalog facts stay one row until the article is narrower than
   480px (24rem at the 20px root), then stack as a list. */
@container venturi-content (max-width: 24rem) {
  .venturi-catalog-snapshot {
    grid-template-columns: minmax(0, 1fr);
  }

  .venturi-catalog-snapshot__item + .venturi-catalog-snapshot__item {
    border-left: 0;
    border-top: 1px solid var(--venturi-border);
  }
}

@container venturi-content (max-width: 42rem) {
  .venturi-catalog-status-guide {
    grid-template-columns: 1fr;
  }

  .venturi-catalog-status-guide > div + div {
    border-left: 0;
    border-top: 1px solid var(--venturi-border);
  }
}

.venturi-catalog {
  border-bottom: 1px solid var(--venturi-border-strong);
  margin: 1rem 0 2rem;
}

.md-typeset .venturi-catalog__group {
  background: transparent;
  border: 0;
  border-top: 1px solid var(--venturi-border-strong);
  border-radius: 0;
  box-shadow: none;
  font-size: 15px;
  margin: 0;
}

.md-typeset .venturi-catalog__group > summary {
  background: transparent;
  box-sizing: border-box;
  color: var(--venturi-ink);
  cursor: pointer;
  line-height: 1.5;
  min-height: 44px;
  padding: 0.7rem 2.25rem 0.7rem 0.35rem;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .venturi-catalog__group > summary::before {
  display: none;
}

.md-typeset .venturi-catalog__group > summary:is(:hover, :active) {
  background: var(--venturi-accent-wash);
}

.md-typeset .venturi-catalog__group > summary:focus-visible,
.md-typeset .venturi-reference-guide__link:focus-visible,
.md-typeset .venturi-acquisition-index a:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}

.venturi-catalog__category {
  font-weight: 700;
}

.venturi-catalog__count {
  color: var(--venturi-muted);
  float: right;
  font-weight: 500;
}

.venturi-catalog__rows {
  contain-intrinsic-size: auto 60rem;
  content-visibility: auto;
}

.venturi-catalog__row {
  align-items: start;
  border-top: 1px solid var(--venturi-border);
  display: grid;
  gap: 0.65rem 1rem;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 1.35fr) minmax(0, 0.5fr) minmax(0, 1.7fr);
  min-width: 0;
  padding: 0.75rem 0.35rem;
}

.venturi-catalog__provider,
.venturi-catalog__fact,
.venturi-catalog__connect {
  min-width: 0;
}

.venturi-catalog__provider {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.venturi-catalog__fact > span:first-child,
.venturi-catalog__connect > span:first-child {
  color: var(--venturi-muted);
  display: block;
  font-size: 14px;
  font-weight: 500;
  margin-bottom: 0.18rem;
}

.venturi-catalog__fact > strong {
  color: var(--venturi-ink);
  display: block;
  font-size: 15px;
  line-height: 1.45;
  text-wrap: balance;
}

.venturi-catalog__connect > a {
  display: block;
  font-size: 15px;
  line-height: 1.45;
  overflow-wrap: anywhere;
  text-wrap: balance;
}

.venturi-status {
  border: 1px solid var(--venturi-border-strong);
  border-radius: 999px;
  color: var(--venturi-muted);
  font-size: 14px;
  font-weight: 500;
  line-height: 1.4;
  padding: 0.08rem 0.45rem;
}

.venturi-status--certified {
  border-color: var(--venturi-teal);
  color: var(--venturi-ink);
}

.venturi-reference-guides,
.venturi-acquisition-index {
  border-top: 1px solid var(--venturi-border-strong);
  margin: 0.8rem 0 1.8rem;
}

.venturi-reference-guides {
  max-inline-size: var(--venturi-operating-measure);
}

/* Two home columns only where each keeps a full index row (label plus
   action) on one line: an article of at least 62rem (1240px). */
@container venturi-content (min-width: 62rem) {
  .venturi-home-grid {
    align-items: start;
    column-gap: 2rem;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    row-gap: 0.6rem;
  }
}

.md-typeset .venturi-reference-guide__link {
  align-items: baseline;
  border-bottom: 1px solid var(--venturi-border);
  color: var(--venturi-ink);
  display: grid;
  gap: 0.45rem 1rem;
  grid-template-columns: minmax(0, 1fr) minmax(10rem, 1fr);
  min-height: 44px;
  padding: 0.65rem 0.35rem;
  text-decoration: none;
  transition: background-color var(--venturi-duration) var(--venturi-ease), color var(--venturi-duration) var(--venturi-ease);
}

.md-typeset .venturi-reference-guide__link:is(:hover, :active) {
  background: var(--venturi-accent-wash);
}

.md-typeset .venturi-reference-guide__link > p {
  color: var(--venturi-muted);
  font-size: 15px;
  margin: 0;
  max-inline-size: none;
  text-wrap: balance;
}

.venturi-acquisition-index__row {
  align-items: center;
  border-bottom: 1px solid var(--venturi-border);
  display: grid;
  gap: 0.7rem 1.2rem;
  grid-template-columns: minmax(0, 1fr) max-content;
  min-width: 0;
  padding: 0.7rem 0.35rem;
}

.venturi-acquisition-index__row > div,
.venturi-acquisition-index__row > nav {
  min-width: 0;
}

.venturi-acquisition-index__row strong,
.venturi-acquisition-index__row span {
  display: block;
}

.venturi-acquisition-index__row span {
  color: var(--venturi-muted);
  font-size: 15px;
  line-height: 1.5;
  margin-top: 0.2rem;
  text-wrap: balance;
}

.venturi-acquisition-index__row > nav {
  display: flex;
  flex-wrap: wrap;
  gap: 0 0.9rem;
}

.md-typeset .venturi-acquisition-index__row > nav > a {
  align-items: center;
  display: inline-flex;
  font-size: 15px;
  font-weight: 500;
  min-height: 44px;
  transition: color var(--venturi-duration) var(--venturi-ease);
}

@media screen and (max-width: 59.9375em) {
  .venturi-catalog__row {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media screen and (max-width: 38em) {
  .venturi-catalog__row,
  .md-typeset .venturi-reference-guide__link {
    grid-template-columns: 1fr;
  }

  .venturi-catalog__row,
  .venturi-acquisition-index__row {
    padding-inline: 0.15rem;
  }

  /* The provider count moves to its own line under the category name. */
  .venturi-catalog__count {
    display: block;
    float: none;
  }
}

/* Evidence is a short definition list, not a canvas or a wide data table.
   Keep each source beside its capability, then stack the pair on phones. */
.md-typeset > .venturi-evidence-capabilities {
  border-block: 1px solid var(--venturi-border-strong);
  max-inline-size: none;
}

.venturi-evidence-capabilities > div {
  display: grid;
  gap: 0.5rem 1.2rem;
  grid-template-columns: minmax(0, 1fr) minmax(0, 2fr);
  padding: 0.7rem 0;
}

.venturi-evidence-capabilities > div + div {
  border-top: 1px solid var(--venturi-border);
}

.md-typeset .venturi-evidence-capabilities :is(dt, dd) {
  margin: 0;
  text-wrap: pretty;
}

@container venturi-content (max-width: 32rem) {
  .venturi-evidence-capabilities > div {
    grid-template-columns: 1fr;
    gap: 0.2rem;
  }
}

/* Task descriptions use the available article width; short destinations
   take only their content width. Stack within a narrow article, including
   desktop widths where both navigation rails are visible. */
@container venturi-content (max-width: 38rem) {
  .venturi-acquisition-index__row {
    grid-template-columns: 1fr;
    gap: 0.25rem;
  }
}

/* Editorial motion rule: state changes may only fade color/background/border
   (<=200ms); reduced-motion users get instant everything. */
@media (prefers-reduced-motion: reduce) {
  .md-typeset a,
  .md-typeset .md-button,
  .md-typeset .grid.cards > ul > li,
  .md-typeset .venturi-catalog__group > summary,
  .md-footer__link,
  .md-nav__link,
  .md-path__link,
  .md-header__button,
  .venturi-header__link,
  .md-search__form,
  .md-typeset .tabbed-labels > label {
    transition: none !important;
  }
}

/* Build-time Mermaid geometry uses the loaded documentation font. */
.md-typeset figure.mermaid {
  display: block;
  margin: 1.4rem 0;
  max-width: 100%;
  overflow: visible;
  text-align: center;
  width: auto;
}

.md-typeset figure.mermaid > svg {
  display: block;
  height: auto;
  margin: 0 auto;
  max-width: 100%;
}

/* The pre-rendered diagrams carry light-theme colors. In the dark theme they
   sit on a themed light figure panel rather than an unreadable inversion. The
   panel is a light-theme island: it re-scopes the light roles its contents
   read (the pan hint's text, the pan region's scroll covers and cue, and the
   focus ring), so none of them resolve to dark-theme values on white. */
[data-md-color-scheme="slate"] .md-typeset figure.mermaid {
  --venturi-canvas: #ffffff;
  --venturi-ink: #1c1e21;
  --venturi-muted: #525860;
  --venturi-scroll-cue: rgba(0, 0, 0, 0.16);
  --venturi-focus: rgba(0, 0, 0, 0.9);
  background: #ffffff;
  border: 1px solid #dadde1;
  border-radius: var(--venturi-r-card);
  color: var(--venturi-ink);
  padding: 16px;
}

/* Identifiers inside tables and admonitions keep a readable floor. */
.md-typeset table:not([class]) code,
.md-typeset .admonition code {
  font-size: max(0.9em, 14px);
}

/* Reference-guide rows are whole-row links; the title carries the link colour
   so the row reads as clickable before hover (touch has no hover). */
.md-typeset .venturi-reference-guide__link > strong {
  color: var(--venturi-blue-strong);
  text-wrap: balance;
}

.md-typeset .venturi-reference-guide__link:is(:hover, :active) > strong {
  color: var(--venturi-ink);
}

/* Per-page feedback link (#252): quiet, separated from the page body, and a
   44px touch target. */
.md-typeset .venturi-feedback {
  margin-top: 2.5rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--venturi-border);
}

.md-typeset .venturi-feedback__link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}

/* Wide tables (#253; design system `table`: "named local overflow wrapper"):
   the build wraps every Markdown table in a labelled, keyboard-focusable
   region (role="region", aria-label, tabindex="0"; see scripts/mkdocs_hooks.py).
   The region is the horizontal scroller and carries the edge-shadow scroll cue
   (the classic local/scroll two-layer background: page-colored covers travel
   with the content, the cue stays at whichever edge still has content), so a
   clipped column reads as scrollable rather than cut off. Material's own
   wrapper inside it no longer scrolls, so there is exactly one scroll
   container and one tab stop. Its focus ring is the shared one. */
.md-typeset .venturi-table-region {
  margin: 1em 0;
  /* The focusable region, not the table, carries the documentation reading
     measure, so a descriptive cell never runs the full 2560px article and a
     wider table still scrolls inside the region (landing-page#2309 review;
     a max-width on the table made the table the scrolling element, which
     axe flags as a non-focusable scrollable region). */
  max-width: min(100%, 76ch);
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  background:
    linear-gradient(to right, var(--venturi-canvas) 45%, transparent) 0 0 / 48px 100% no-repeat local,
    linear-gradient(to left, var(--venturi-canvas) 45%, transparent) 100% 0 / 48px 100% no-repeat local,
    linear-gradient(to right, var(--venturi-scroll-cue), transparent) 0 0 / 14px 100% no-repeat scroll,
    linear-gradient(to left, var(--venturi-scroll-cue), transparent) 100% 0 / 14px 100% no-repeat scroll;
}

.md-typeset .venturi-table-region > .md-typeset__scrollwrap {
  background: none;
  margin: 0 !important;
  overflow: visible !important;
}

/* Material pads the table 0.8rem on each side to offset its wrapper's bleed.
   The region does not bleed, so the padding only pushed the table 16px off the
   article's reading-start rail and took 32px from its columns. */
html .md-typeset .venturi-table-region table:not([class]) {
  display: table;
  margin: 0;
  overflow: visible;
  width: 100%;
}

.md-typeset .venturi-table-region .md-typeset__table {
  display: block;
  margin-bottom: 0;
  padding: 0;
}

/* Search loading state (#253): while the search index loads, the result
   summary ("Initializing search") carries a progress indicator
   (javascripts/a11y-nav-labels.js sets data-venturi-search-state). */
[data-md-component="search"][data-venturi-search-state="loading"] .md-search-result__meta::before {
  animation: venturi-search-spin 0.8s linear infinite;
  border: 2px solid currentColor;
  border-radius: 50%;
  border-right-color: transparent;
  content: "";
  display: inline-block;
  height: 0.7em;
  margin-right: 0.5em;
  vertical-align: -0.1em;
  width: 0.7em;
}

@keyframes venturi-search-spin {
  to {
    transform: rotate(1turn);
  }
}

@media (prefers-reduced-motion: reduce) {
  [data-md-component="search"][data-venturi-search-state="loading"] .md-search-result__meta::before {
    animation: none;
    border-right-color: currentColor;
    opacity: 0.6;
  }
}

/* Diagrams preserve their font-metric scale. Local panning works at every
   viewport; expanding adds space without reducing the label size. */
.md-typeset .venturi-diagram__viewport {
  max-width: 100%;
  overflow: auto;
  overscroll-behavior-inline: contain;
  -webkit-overflow-scrolling: touch;
}
.md-typeset .venturi-diagram__viewport > svg {
  display: block;
  font-feature-settings: normal;
  font-variant: normal;
  height: auto;
  margin: 0 auto;
  max-width: none !important;
  width: var(--venturi-diagram-width) !important;
}
/* Mermaid measures HTML labels before the document's prose rules apply.
   Preserve the inherited per-label white-space and line-height; otherwise
   prose pretty-wrapping creates extra lines inside fixed foreignObjects. */
.md-typeset .venturi-diagram__viewport svg foreignObject p {
  font-size: inherit;
  letter-spacing: normal;
  line-height: inherit;
  margin: 0;
  max-width: none;
  overflow-wrap: normal;
  text-wrap: inherit;
  word-break: normal;
}
.md-typeset .venturi-diagram__hint {
  color: var(--venturi-muted);
  font-size: 14px;
  margin: 0.4rem 0 0;
  max-width: none;
  text-align: left;
  text-wrap: balance;
}
.venturi-diagram__expand, .venturi-diagram__close {
  background: transparent;
  border: 1px solid var(--venturi-link-underline);
  border-radius: 8px;
  color: var(--venturi-ink);
  cursor: pointer;
  font: inherit;
  min-height: 44px;
  padding: 8px 16px;
}
.venturi-diagram__expand { margin-top: 8px; }
.venturi-diagram__viewport:focus-visible,
.venturi-diagram__expand:focus-visible,
.venturi-diagram__close:focus-visible {
  outline: 2px solid var(--venturi-focus);
  outline-offset: 2px;
}
/* Keep the document fixed while preserving a classic scrollbar gutter. */
html.venturi-diagram-open {
  overflow: hidden;
  padding-right: var(--venturi-diagram-page-padding, 0px);
}
.venturi-diagram-dialog {
  background: var(--venturi-surface);
  border: 1px solid var(--venturi-border-strong);
  border-radius: 8px;
  color: var(--venturi-ink);
  height: min(90vh, 1100px);
  max-width: calc(100vw - 32px);
  padding: 16px;
  width: calc(100vw - 32px);
}
.venturi-diagram-dialog::backdrop { background: rgb(0 0 0 / 55%); }
.venturi-diagram-dialog__header {
  align-items: center;
  display: flex;
  gap: 16px;
  justify-content: space-between;
  margin-bottom: 16px;
}
.venturi-diagram-dialog__header h2 { font-size: 18px; margin: 0; }
.venturi-diagram-dialog .venturi-diagram__viewport {
  background: #ffffff;
  max-height: calc(90vh - 112px);
}
