.md-typeset h1 {
  font-size: var(--fs-32);
  font-weight: var(--ui-fw-strong);
  color: var(--rcp-text);
  letter-spacing: var(--ui-ls-display);
}

.md-typeset h2 {
  font-size: var(--fs-24);
  font-weight: var(--ui-fw-strong);
  letter-spacing: var(--ui-ls-section);
}

.md-typeset h3 {
  font-size: var(--fs-20);
  font-weight: var(--ui-fw-strong);
}
.md-typeset :is(h1, h2, h3, h4, h5, h6) { line-height: var(--ui-lh-heading); }
/* code takes the step of the text it sits in, never a larger one: a heading's,
   and the table's, which is the one context whose text sits below the mono step */
.md-typeset h2 code { font-size: var(--fs-20); }
.md-typeset h3 code { font-size: var(--fs-16); }
.md-typeset table:not([class]) :is(th, td) code { font-size: var(--fs-12); }

/* A subsection's prose, code, tables and notices share its heading's inset.
   Cap nesting at two steps so deep sections retain usable line length. */
.md-typeset .rbln-subsection { margin-inline-start: var(--sp-20); }
.md-typeset .rbln-subsection .rbln-subsection .rbln-subsection { margin-inline-start: 0; }
@media screen and (max-width: 44.984375em) {
  .md-typeset .rbln-subsection { margin-inline-start: var(--sp-8); }
}

.md-version {
  font-weight: 400;
}

.nowrap {
  white-space: nowrap;
}

#headerTopBanner {
  height: 40px;
  background-color: var(--rcp-surface);
  position: relative;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  font-size: var(--fs-14);
}

/* min-width:0 on the flex items: at auto the nowrap line clips at both ends instead of shrinking. */

#headerTopBanner .txt-container {
  position: relative;
  display: flex;
  align-items: center;
  height: 20px;
  min-width: 0;
  padding-left: var(--sp-10);
}

#headerTopBanner .txt-container:before,
#headerTopBanner .txt-container:after {
  content: '';
  position: absolute;
  top: 0;
  width: 2px;
  height: 100%;
  background-color: var(--rcp-marker);
}
#headerTopBanner .txt-container:before { left: 0; }
#headerTopBanner .txt-container:after { right: 0; }

/* A block, not a flex row: text-overflow has nothing to ellipsize inside a flex container. */
.banner-txt {
  display: block;
  height: 20px;
  min-width: 0;
  margin: 0;
  padding: 0 1.428em;
  color: var(--rcp-text);
  line-height: 20px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.theme-color {
  background: var(--rcp-pill-bg);
  color: var(--rcp-accent) !important;
  padding: 0 0.4em;
  border-radius: var(--ui-radius-sm);
  font-weight: var(--ui-fw-strong);
  margin-right: var(--sp-2);
}

[data-md-color-scheme="slate"] .md-header__button.md-logo img,
[data-md-color-scheme="slate"] .md-nav__button.md-logo img {
  content: url("../assets/rebellions_logo.dark.png");
}

.top-banner-link {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 10;
  text-decoration: none;
}

[data-md-color-scheme="default"] .md-footer,
[data-md-color-scheme="default"] .md-footer-meta { border-top: var(--ui-hairline); }

.md-footer-links { display: flex; gap: var(--sp-20); flex-wrap: wrap; margin-bottom: var(--sp-8); }
.md-footer-links a { color: var(--md-footer-fg-color--light); text-decoration: none; }
.md-footer-links a:hover { color: var(--md-footer-fg-color); }

/* A long reference script is meant to be copied, not read on the page. */
.rbln-scrollbox > .highlight,
.rbln-scrollbox > .highlighttable {
  max-height: 20rem;
  overflow-y: auto;
  border: var(--ui-hairline);
  border-radius: var(--ui-radius-sm);
}

.md-typeset video {
  width: 100%;
  border-radius: var(--ui-radius);
}

.md-typeset a:not(.md-button):not(.headerlink):not(.md-code__button) {
  text-decoration: none;
}
.md-typeset a:not(.md-button):not(.headerlink):not(.md-code__button):is(:hover, :focus-visible) {
  text-decoration: underline;
  text-decoration-color: var(--rcp-accent);
  text-decoration-thickness: 2px;
  text-underline-offset: 3px;
  text-decoration-skip-ink: none;
}
[dir][data-md-color-scheme] ::placeholder {
  color: var(--rcp-muted);
  opacity: 1;
}

[dir][data-md-color-scheme] :focus-visible {
  outline: var(--ui-ring) solid var(--rcp-accent);
  outline-offset: var(--ui-ring);
}

.md-typeset h4 { margin: var(--sp-24) 0 var(--sp-12); font-size: var(--fs-18); font-weight: var(--ui-fw-strong); }
.md-typeset h4 code { font-size: var(--fs-16); }
.md-typeset h5:not(.doc-heading) { margin-top: var(--sp-24); margin-bottom: var(--sp-12); font-size: var(--fs-14); font-weight: var(--ui-label-fw); color: var(--rcp-text); }
.md-typeset .highlight + :is(h4, h5:not(.doc-heading)) { margin-top: var(--sp-32); }
.md-typeset h5:not(.doc-heading) + * { margin-top: var(--sp-12); }
.md-typeset h5.doc-heading { font-size: var(--fs-16); font-weight: var(--ui-fw-strong); text-transform: none; letter-spacing: normal; color: var(--rcp-text); }
.md-typeset :is(code, kbd, samp) { text-transform: none; letter-spacing: normal; }
.md-typeset :is(code, kbd) { font-size: var(--ui-fs-mono); }
/* The mono step is the one for running prose; text already set at the label
   step takes the label step, or a code span renders larger than the words
   around it. */
.md-typeset :is(small, .footnote, .md-source-file) :is(code, kbd) {
  font-size: var(--fs-12);
  line-height: var(--ui-lh-dense);
}
.md-typeset pre, .md-typeset pre > code { font-size: var(--ui-fs-code); }
/* `[id]`, not `:target`: the theme's margin reaches one only then, and a scripted scroll makes none */
.md-content [id] {
  --scroll-clearance: calc(var(--md-scroll-margin) - var(--md-scroll-offset, 0rem));
  scroll-margin-top: calc(var(--scroll-clearance) + var(--scroll-context, 0rem));
}
.js .md-typeset .tabbed-content [id] {
  --scroll-clearance: calc(var(--md-scroll-margin) - var(--md-scroll-offset, 0rem) + var(--ui-tab-strip));
}
.md-content :is([id^="__codelineno-"], [id^="line_block-"]) {
  --scroll-context: max(var(--md-scroll-margin), (100vh - var(--scroll-clearance)) * 0.33);
}

.md-typeset .tabbed-labels > label,
.md-typeset .footnote,
.md-typeset .md-source-file { font-size: var(--fs-12); }
.md-typeset .md-source-file__fact { font-size: inherit; }
.md-nav--secondary > .md-nav__title,
.md-footer__direction {
  font-size: var(--ui-label-fs);
  font-weight: var(--ui-label-fw);
  letter-spacing: var(--ui-label-ls);
  text-transform: uppercase;
  color: var(--ui-label-fg);
}
/* The header is the only surface a table may paint: a striped row would cover the
   edge fades, which ride the box behind the table. Its own role, because the two
   grounds want different steps — against white the card surface is barely a band
   (CIELAB L* 4.6 below the page) and needs about twice that (10.8), while against
   the slate page the card surface already reads and `--rcp-surface2` *is* that
   page (ΔL* 0). */
/* The label ink is tuned against the page; a surface that changes the ground
   rebinds the role rather than restating a color. */
/* Size, weight and ink from the label role, but not its casing or tracking:
   those are for words the site writes itself, not for an authored header. */
.md-typeset table:not([class]) th {
  background: var(--rcp-table-head);
  --ui-label-fg: var(--rcp-muted);
  font-size: var(--ui-label-fs);
  font-weight: var(--ui-label-fw);
  color: var(--ui-label-fg);
}
/* Material renders the section the reader is in as a heading and the same entry
   as a plain link from outside it, so a treatment that changes size or case made
   the words resize as the reader walked in. The role rides on weight and ink. */
.md-nav--primary .md-nav__item--section > :is(.md-nav__link, .md-nav__link[for]) {
  font-weight: var(--ui-label-fw);
  color: var(--ui-label-fg);
}
/* The first column names the row; it reads as the key, not as another value. */
.md-typeset table:not([class]) tbody td:first-child { color: var(--rcp-text); }
.md-typeset .admonition,
.md-typeset details { font-size: var(--fs-14); line-height: var(--ui-lh-dense); }
.md-typeset .admonition-title,
.md-typeset summary { font-size: var(--fs-14); font-weight: var(--ui-fw-strong); }
.md-typeset :is(.admonition-title, summary)[data-default-title] { text-transform: uppercase; letter-spacing: var(--ui-label-ls); }
/* The theme quiets `small` with `opacity: .75`, which mutes a second time on
   top of whatever ink it holds and puts a link inside it under AA. One
   muting, said as a role. */
.md-typeset small {
  font-size: var(--fs-12);
  line-height: var(--ui-lh-dense);
  color: var(--rcp-muted);
  opacity: 1;
}
/* A note under a table belongs to it, so it keeps the table's distance
   rather than taking a new paragraph's own. */
.md-typeset :is(table, .md-typeset__scrollwrap) + p:has(> small:only-child) {
  margin-top: var(--sp-8);
  line-height: var(--ui-lh-dense);
}
html[lang="ko"] .md-typeset { word-break: keep-all; }
.md-typeset :is(p, li, dd) { line-height: var(--ui-lh-prose); }
.md-typeset p { margin-block: var(--ui-prose-gap); }
html[lang="ko"] :is(.md-nav__link, .md-tabs__link, .md-path__item) { word-break: keep-all; }

.md-typeset :is(.admonition[class], details) {
  border-width: 1px 1px 1px var(--ui-rail-w);
  border-top-color: var(--rcp-border);
  border-right-color: var(--rcp-border);
  border-bottom-color: var(--rcp-border);
  border-radius: var(--ui-radius);
  box-shadow: none;
}
.md-typeset :is(.admonition[class], details) > :is(.admonition-title, summary) {
  background-color: transparent;
  padding-bottom: var(--sp-4);
}
.md-typeset :is(.admonition[class], details) > :is(.admonition-title, summary):last-child { padding-bottom: var(--sp-8); }
.md-typeset :is(.admonition[class], details) > :is(.admonition-title, summary) + * { margin-top: var(--sp-4); }

.md-typeset :is(.admonition-title, summary, .highlighttable :is(.linenos, .linenodiv), .gi, .gd) { border-radius: inherit; }
.md-typeset :is(pre, pre > code) { line-height: var(--ui-lh-code); }
.md-typeset pre > code { border-radius: var(--ui-radius); padding: .8em 1.1em; }
.md-typeset .highlight span.filename { font-size: var(--fs-12); font-weight: var(--ui-fw-strong); border-radius: var(--ui-radius) var(--ui-radius) 0 0; }
.md-code__nav { border-radius: var(--ui-radius-sm); }
.md-typeset .doc-section-title { font-weight: var(--ui-fw-strong); }
.md-typeset .highlighttable { border-radius: var(--ui-radius); overflow: hidden; }
.md-typeset .highlighttable > tbody > tr > .code > div > pre > code { border-radius: 0; }
.md-typeset :is(:not(pre) > code, > code) { border-radius: var(--ui-radius-sm); padding: .12em .4em; }

.md-typeset table:not([class]) {
  border-color: var(--rcp-border);
  border-radius: var(--ui-radius);
  overflow: hidden;
}
.md-typeset table:not([class]) td { border-top-color: var(--rcp-border); }
.md-typeset :is(sup, sub) { font-size: var(--fs-12); }
.md-typeset table:not([class]) tbody tr:hover { background-color: color-mix(in srgb, var(--rcp-surface) 55%, transparent); box-shadow: none; }

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

.md-typeset .grid { gap: var(--sp-20); }
.md-typeset .grid.cards > ul > li {
  border-color: var(--rcp-border);
  border-radius: var(--ui-radius-lg);
  padding: var(--sp-20);
  transition: border-color var(--ui-t-surface), box-shadow var(--ui-t-surface), transform var(--ui-t-surface);
}
.md-typeset .grid.cards > ul > li:is(:hover, :has(:focus-visible)) {
  border-color: var(--rcp-accent);
  box-shadow: 0 10px 28px -14px color-mix(in srgb, var(--rcp-accent) 45%, transparent);
  transform: translateY(-2px);
}
.md-typeset .grid.cards > ul > li > hr { border-bottom-color: var(--rcp-border); }

.md-search__form { border-radius: var(--ui-radius); }
/* each selector outranks one Material source that paints this field; a bare .md-search__form loses */
[data-md-color-primary] .md-search__form,
[data-md-toggle="search"]:checked ~ .md-header .md-search__form {
  background-color: var(--rcp-surface);
  border: var(--ui-hairline);
}
[data-md-color-primary] .md-search__form:hover,
[data-md-toggle="search"]:checked ~ .md-header .md-search__form:hover {
  background-color: var(--rcp-surface2);
}
[data-md-toggle="search"]:checked ~ .md-header .md-search__form { border-radius: var(--ui-radius) var(--ui-radius) 0 0; }
/* [dir] is load-bearing: Material sets this radius behind a [dir] selector, and a bare one loses. */
[dir] .md-search__output { border-bottom-left-radius: var(--ui-radius); border-bottom-right-radius: var(--ui-radius); }
.md-header .md-select__inner,
.md-header .md-version__list {
  border-radius: var(--ui-radius);
  border: var(--ui-hairline);
}
.md-header .md-select__link,
.md-header__topic .md-ellipsis { font-size: var(--fs-14); }
:is(.md-nav__link, .md-path__link, .md-footer__title) .md-ellipsis { line-height: var(--ui-lh-control); }

.md-nav--primary .md-nav__title {
  background-color: var(--rcp-surface);
  color: var(--rcp-text);
  font-size: var(--fs-14);
  font-weight: var(--ui-fw-strong);
}

::selection { background-color: color-mix(in srgb, var(--rcp-accent) 28%, transparent); }

.md-skip {
  font-size: var(--fs-12);
  border-radius: var(--ui-radius-sm);
}
@media (prefers-reduced-motion: reduce) {
  .md-typeset .grid.cards > ul > li:is(:hover, :has(:focus-visible)) { transform: none; }
}

.md-typeset .tabbed-labels { box-shadow: 0 -1px var(--rcp-border) inset; }
.js .md-typeset .tabbed-labels {
  position: sticky;
  top: calc(var(--md-scroll-margin) - 1.2rem);
  z-index: 1;
  background: var(--md-default-bg-color);
}
.md-typeset .tabbed-labels > label {
  font-weight: var(--ui-fw-strong);
  line-height: var(--ui-lh-control);
  color: var(--rcp-muted);
}
.md-typeset .tabbed-labels > label:hover { color: var(--rcp-accent); }
.md-typeset .tabbed-set .tabbed-labels > label > [href] { color: inherit; }
.md-typeset .tabbed-set .tabbed-labels > label:is(:hover, :focus-within) > [href] {
  color: var(--rcp-accent);
  text-decoration: none;
}
.md-typeset .tabbed-labels:before { background: var(--rcp-marker); }

.md-typeset .md-button {
  border-radius: var(--ui-radius);
  border-width: 1px;
  color: var(--rcp-accent);
  border-color: var(--rcp-accent);
  font-weight: var(--ui-fw-strong);
  padding: .55em 1.4em;
}
.md-typeset .md-button:is(:hover, :focus-visible) {
  background-color: color-mix(in srgb, var(--rcp-accent) 10%, transparent);
  border-color: var(--rcp-accent);
  color: var(--rcp-accent);
}
.md-typeset .md-button--primary,
.md-typeset .md-button--primary:is(:hover, :focus-visible) {
  background-color: var(--rcp-accent);
  border-color: var(--rcp-accent);
  color: var(--rcp-surface);
}

.md-path__list { flex-wrap: wrap; row-gap: var(--sp-2); }
.md-path__item { white-space: nowrap; }
.md-tabs__item--active .md-tabs__link { box-shadow: inset 0 -2px var(--rcp-marker); padding-bottom: var(--sp-6); }
/* .js is load-bearing: Material draws this indicator only with JS on, so an override without the class never matches. */
.js .md-typeset .tabbed-labels::before { background: var(--rcp-marker); }
.js .md-typeset .tabbed-labels:not(:hover, :focus-within)::before { transition: none; }
.md-footer__title { font-size: var(--fs-16); }
.md-footer__direction,
.md-footer-links a,
.md-copyright__highlight,
.md-source-file__fact { line-height: var(--ui-lh-control); }
.md-footer__direction { opacity: 1; }
.md-top {
  border: var(--ui-hairline);
  border-radius: var(--ui-radius-pill);
  box-shadow: none;
  color: var(--rcp-text);
  font-size: var(--fs-14);
  line-height: var(--ui-lh-control);
}
.md-top:is(:hover, :focus-visible) { border-color: var(--rcp-accent); color: var(--rcp-accent); background-color: var(--md-default-bg-color); }

.md-search-result__meta { font-size: var(--fs-12); }
.md-search-result__more :is(summary, summary > div) { font-size: var(--fs-12); line-height: var(--ui-lh-control); }
.md-search-result h1 { font-weight: var(--ui-fw-strong); }
.md-search-result .md-typeset { font-size: var(--fs-14); }
.md-search-result .md-typeset h1 { font-size: var(--fs-16); line-height: var(--ui-lh-heading); }
.md-search-result__meta { line-height: var(--ui-lh-control); padding: .5em var(--sp-16); }
.md-search__suggest { font-size: var(--fs-16); line-height: var(--ui-lh-control); }
[dir][data-md-color-scheme] .md-search__overlay { background-color: color-mix(in srgb, var(--rcp-text) 54%, transparent); }
.md-search-result .md-typeset h2 { font-size: var(--fs-14); font-weight: var(--ui-fw-strong); }
.md-search-result mark { font-weight: var(--ui-fw-strong); }


@media screen and (max-width: 76.1875em) {
  /* [dir] is load-bearing: this mirrors Material's `[dir="ltr"] .md-typeset ul li ul`, and a selector without it is one class short and loses. */
  [dir] .md-typeset :is(ul, ol) li :is(ul, ol) { margin-left: 0; }
  [dir] .md-typeset :is(ul, ol) li :is(ul, ol) > li { margin-left: 1em; }
}

.md-typeset .footnote-ref { font-size: var(--fs-12); font-weight: var(--ui-fw-strong); }
.md-typeset h6 { font-size: var(--fs-13); font-weight: var(--ui-fw-strong); color: var(--rcp-text); }
/* the mark is never bigger than the heading it marks: h5 and below are smaller than the step */
.md-typeset .headerlink { font-size: min(1em, var(--fs-16)); }

/* gutter and code are two cells of one table: equal leading or the numbers drift */
.md-typeset pre > code,
.md-typeset .highlighttable :is(.linenos, .linenodiv) :is(pre, code, span) { line-height: var(--ui-lh-code); }
.md-typeset .highlighttable :is(.linenos, .linenodiv) {
  border-right: var(--ui-hairline);
  padding-right: var(--sp-8);
  padding-left: var(--sp-8);
  font-size: var(--ui-fs-code);
}
.md-typeset .highlighttable :is(.linenos, .linenodiv) :is(pre, code, span) { color: var(--rcp-muted); }
/* It replaces the site title, which filled the header's line box: a shorter
   control inherits that box and sits at its top. */
.md-version { display: flex; align-items: center; }
.md-version, .md-version :is(button, span, a) { font-size: var(--fs-14); line-height: var(--ui-lh-control); }
/* The list opened over its own button and hid the version it names; it drops below like the language menu. */
.md-header .md-version__list {
  top: 100%;
  margin-block: 0;
  padding-block: var(--sp-4);
  box-shadow: var(--md-shadow-z2);
}
.md-header .md-version:is(:hover, :focus-within) .md-version__list { max-height: 60vh; }
.md-header .md-version__link { padding: var(--sp-8) var(--sp-24) var(--sp-8) var(--sp-12); }
/* A data table is scanned, not read in prose lines. */
.md-typeset table:not([class]) :is(th, td) { padding: .55em 1em; line-height: var(--ui-lh-dense); }

.md-typeset #what-rbln-pytorch-provides + .md-typeset__scrollwrap :is(th, td):first-child {
  min-width: 13rem;
}

.md-typeset #what-rbln-pytorch-provides + .md-typeset__scrollwrap :is(th, td):last-child {
  min-width: 7rem;
}

.md-typeset :is(.admonition[class], details):not(.warning, .caution, .attention, .danger, .error, .failure, .fail, .missing, .bug) {
  border-left-color: var(--rcp-accent);
}
.md-typeset :is(.admonition[class], details):not(.warning, .caution, .attention, .danger, .error, .failure, .fail, .missing, .bug) > :is(.admonition-title, summary)::before {
  background-color: var(--rcp-marker);
}
.md-typeset details:not(.warning, .caution, .attention, .danger, .error, .failure, .fail, .missing, .bug) > summary::after {
  background-color: var(--rcp-marker);
}

.md-typeset .md-source-file { color: var(--rcp-muted); }
.md-typeset .md-source-file .md-icon svg { fill: currentColor; }

[data-md-color-scheme="slate"] .md-typeset img:is([src$="misc_icon.png"], [src$="concurrent_icon.png"], [src$="system_management_icon.png"]) {
  filter: invert(1);
}

.md-typeset .grid.cards li .twemoji { --md-icon-size: var(--sp-20); }
.md-typeset .grid.cards li img[width] {
  width: var(--sp-20);
  height: var(--sp-20);
  object-fit: contain;
  vertical-align: calc(var(--sp-4) * -1);
}

/* not #only- (already on the page ground) and not [width] (an inline glyph) */
.md-typeset img:is([src$=".png"], [src$=".jpg"], [src$=".jpeg"], [src$=".gif"]):not([src*="#only-"]):not([width]) {
  box-sizing: border-box;
  padding: var(--sp-8);
  background: var(--rcp-surface);
  border: var(--ui-hairline);
  border-radius: var(--ui-radius-lg);
}

/* Appzi measures its tab in an unprefixed body-level div before it mounts; keep that off-screen. */
body > div:has(> section .appzi-printed-text) {
  position: fixed !important;
  top: 0 !important;
  left: -10000px !important;
}

@media print {
  #headerTopBanner, .md-code__nav, .md-top, .md-content__button { display: none !important; }
  /* feedback widget: hashed classes, stable id prefix */
  [id^="appzi-"] { display: none !important; }
}

.md-typeset .table-filter-empty {
  color: var(--rcp-muted);
  font-size: var(--fs-14);
  text-align: center;
  padding: var(--sp-24) var(--sp-16);
  border: var(--ui-hairline);
  border-radius: var(--ui-radius);
}

/* a spanning cell centres against the rows it spans */
.md-typeset table :is(th, td)[rowspan] { vertical-align: middle; }

/* an inline mark beside a value: the chip idiom, sized to sit in a line of text */
.md-typeset .rbln-badge {
  display: inline-block;
  margin-left: var(--sp-4);
  padding: 0 var(--sp-6);
  font-family: var(--rcp-sans);
  font-size: var(--fs-12);
  line-height: var(--ui-lh-control);
  color: var(--rcp-muted);
  background: var(--rcp-chip-bg);
  border: var(--ui-hairline-w) solid var(--rcp-chip-bd);
  border-radius: var(--ui-radius-pill);
  vertical-align: middle;
  white-space: nowrap;
}

/* A cell that holds several values stacks them; the markup comes from macros/. */
.md-typeset .rbln-stack { list-style-position: inside; vertical-align: middle; }
.md-typeset .rbln-stack > li { text-align: left; vertical-align: middle; }

.md-typeset .table-filter-empty:empty,
.md-typeset .md-typeset__scrollwrap[hidden] {
  display: none;
}

/* One box holds the whole idea: it is the column, it scrolls, it is framed, and it
   shows at which edge the table continues (the gradients further down). A border
   is painted on the border box and does not move with the content, so the frame
   belongs on the scroller itself — it used to sit on the table, which is why a
   narrow table framed only its own content and a wide one lost its left edge the
   moment it was scrolled.

   Material's own geometry is three statements it gives no variables for, so they
   are answered here: the wrapper bleeds .6rem (the box would not be the column),
   this box insets the table by the same (a strip of page ground inside the frame),
   and the table draws a frame of its own (a second one). */
.md-typeset__scrollwrap { margin-inline: 0; }
.md-typeset table:not([class]) {
  border: none;
  border-radius: 0;
}

/* The chip border reads 1.9:1 in light and 1.4:1 in dark against the ground behind
   it, which is under the 3:1 a control you must find needs — so it stays the
   resting look and the ink role takes over while the pointer is in the region,
   which is when the bar is the thing being reached for. */
body,
.md-typeset__table,
.md-typeset pre > code,
.rcp .term pre,
.install-matrix pre,
.md-sidebar__scrollwrap,
.md-search__scrollwrap,
.md-version__list,
.md-select__list {
  scrollbar-width: thin;
  scrollbar-color: var(--rcp-chip-bd) transparent;
}
body:hover,
.md-typeset__table:hover,
.md-typeset pre > code:hover,
.rcp .term pre:hover,
.install-matrix pre:hover,
.md-sidebar__scrollwrap:hover,
.md-search__scrollwrap:hover,
.md-version__list:hover,
.md-select__list:hover {
  scrollbar-color: var(--rcp-faint) transparent;
}

.md-typeset dl dt { font-weight: var(--ui-fw-strong); }

.md-typeset :is(strong, b) { font-weight: var(--ui-fw-strong); }

.md-typeset :is(.admonition, details):is(.warning, .caution, .attention) {
  border-left-color: var(--ui-alert-warn);
}
.md-typeset :is(.caution, .attention) > :is(.admonition-title, summary)::before {
  background-color: var(--ui-alert-warn);
  -webkit-mask-image: var(--md-admonition-icon--warning);
  mask-image: var(--md-admonition-icon--warning);
}

.center {
    display: block;
    margin: 0 auto;
}

.md-typeset .driver-installation-flow .mermaid,
.md-typeset .driver-routing-flow .mermaid,
.md-typeset .coding-assistant-architecture .mermaid {
  display: flex;
  justify-content: center;
}

.rbln-mermaid-measure {
  position: fixed;
  visibility: hidden;
  pointer-events: none;
  inset: 0;
}

.rbln-mermaid-measure,
.rbln-mermaid-zoom-probe {
  font-size: var(--fs-16);
}

div.doc-contents:not(.first) {
  padding-left: var(--sp-20);
  border-left: var(--ui-hairline);
}

/* Local-attachment covers ride the content and hide the scroll-attached shadows at each end,
   so a shadow shows only while there is more table that way. */
.md-typeset__table {
  display: block;
  max-width: 100%;
  overflow-x: auto;
  padding: 0;
  border: var(--ui-hairline);
  border-radius: var(--ui-radius);
  background:
    linear-gradient(to right, var(--md-default-bg-color), transparent) 0 0 / 2rem 100% no-repeat local,
    linear-gradient(to left, var(--md-default-bg-color), transparent) 100% 0 / 2rem 100% no-repeat local,
    linear-gradient(to right, var(--rcp-border), transparent) 0 0 / .7rem 100% no-repeat scroll,
    linear-gradient(to left, var(--rcp-border), transparent) 100% 0 / .7rem 100% no-repeat scroll;
}

/* restates Material at matching specificity so source order beats its inline-block */
.md-typeset__table table:not([class]) {
  display: table;
  width: 100%;
  background-color: transparent;
}

.md-typeset table:not([class]) td {
  vertical-align: middle;
}

/* Keep default values readable in the dynamic batching options table. */
.md-typeset .dynamic-batching-options table :is(th, td):nth-child(2),
.md-typeset .dynamic-batching-options table td:nth-child(2) code {
  white-space: nowrap;
}

/* Keep sampler names and model implementation headers on one line. */
.md-typeset .sampler-support-table table th,
.md-typeset .sampler-support-table table td:first-child {
  white-space: nowrap;
}

.md-header__button.md-logo {
  margin: 0;
  padding: 0;
}

.md-header__button.md-logo img {
    height: 2.0rem;
    width: 9.0rem;
}

.line-highlighted {
  background-color: var(--rcp-brand-tint);
}

.md-typeset table:not([class]) :is(th, td).tg-center { text-align: center; }

/* a colspan cell has no column to align with; centred it sits off-screen on a phone */
@media screen and (max-width: 76.1875em) {
  .md-typeset table:not([class]) td[colspan],
  .md-typeset table:not([class]) td.tg-center[colspan] {
    text-align: left;
  }
}

/* A shell prompt is the same mark wherever a command is shown — the recipe
   terminal draws it with ::before, Pygments emits it as a token. Material
   paints the token through `.highlight .gp`, so the list has to reach that
   far to win. */
.gp,
.highlight .gp {
  user-select: none;
  -webkit-user-select: none;
  color: var(--rcp-accent);
  font-weight: var(--ui-fw-strong);
}

/* block, not grid: the grid puts every line in its own row, and a row break is
   a second newline in what the reader copies. Not only inside a line-number
   table — a block without one gets the same grid and doubled the same way. */
.md-typeset code.md-code__content {
  display: block;
}


.md-nav__link[href$="-functions"]:not(:has(+ .md-nav)) {
    display: none !important;
}

/* 99%: the description absorbs the slack, the chip columns keep their size */
.md-typeset tr.doc-section-item > td:has(> .doc-md-description) {
  width: 99%;
}

.md-nav__link .md-ellipsis[data-secondary] {
  overflow: visible;
  text-overflow: clip;
  white-space: normal;
}

.md-nav__link .md-ellipsis[data-secondary]::after {
  content: "\A(" attr(data-secondary) ")";
  white-space: pre;
  display: block;
  margin-top: -0.85em;
  font-size: 1.0em;
  line-height: 1.0;
}

/* the remembered sections are reopened inside this attribute so the restore lands
   without playing the theme's open animation; a click on one still plays it.
   `.md-sidebar` is in the selector for specificity: the theme's own
   `.md-nav__toggle:checked ~ .md-nav` is (0,3,0) and an attribute on `html` alone
   reaches only (0,2,1), which loses. */
html[data-nav-restoring] .md-sidebar :is(.md-nav, .md-nav__icon) {
  transition: none;
}

.md-sidebar--primary a.md-nav__link--active {
  position: relative;
}
.md-sidebar--primary a.md-nav__link--active::before {
  content: '';
  position: absolute;
  left: -0.5rem;
  top: 0.15em;
  bottom: 0.15em;
  width: var(--ui-marker-w);
  background: var(--rcp-marker);
}

.md-sidebar--secondary .md-nav__item--out-of-scope { display: none; }

/* One bar for the run, drawn on the list: a bar per entry sits at that entry's
   indent, so a run across two levels reads as dashes at two different x. */
.md-sidebar--secondary .md-nav--secondary {
  position: relative;
  /* how far the rail stands off the text it marks; the script reads it and keeps
     the path that far to the left of each entry */
  --toc-rail-gap: var(--sp-10);
}
/* An entry can carry this with `--active` and `--passed`, whose rule below hands
   the ink back to the inherited color: doubled, so it wins outright, not on order. */
.md-sidebar--secondary .md-nav--secondary .md-nav__link--toc-in-view.md-nav__link--toc-in-view {
  color: var(--rcp-accent);
}
.md-sidebar--secondary .md-nav__rail {
  position: absolute;
  inset: 0;
  pointer-events: none;
  overflow: visible;
}
.md-sidebar--secondary .md-nav__rail path {
  fill: none;
  stroke-width: var(--ui-marker-w);
  stroke-linecap: round;
  stroke-linejoin: round;
}
/* Its own role, not the hairline: that one is tuned to separate two surfaces and
   comes forward when it runs behind text. */
.md-sidebar--secondary .md-nav__rail-track {
  stroke: var(--rcp-toc-track);
}
.md-sidebar--secondary .md-nav__rail-mark {
  stroke: var(--rcp-marker);
  transition:
    stroke-dasharray var(--ui-t-control),
    stroke-dashoffset var(--ui-t-control);
}
/* the dot is the end of the window, so it goes when there is no window */
.md-sidebar--secondary .md-nav__rail[data-span="no"] .md-nav__rail-end {
  display: none;
}
.md-sidebar--secondary .md-nav__rail--cut :is(.md-nav__rail-mark, .md-nav__rail-end) {
  transition: none;
}
.md-sidebar--secondary .md-nav__rail-end {
  r: 3;
  fill: var(--rcp-marker);
  transition: cx var(--ui-t-control), cy var(--ui-t-control);
}
/* must precede the toc-active tint: a link can carry both classes and they tie */
.md-sidebar--secondary .md-nav__link--active:not(.md-nav__link--toc-active),
.md-sidebar--secondary .md-nav__link--passed {
  color: inherit;
}
.md-sidebar--secondary .md-nav__link--toc-active {
  color: var(--md-typeset-a-color);
}
.md-sidebar--secondary .md-nav--secondary .md-nav__link:is(:hover, :focus):not(
    .md-nav__link--toc-in-view
  ):not(.md-nav__link--toc-active) {
  color: inherit;
}


.md-sidebar__scrollwrap {
  scrollbar-gutter: stable;
  max-height: calc(100vh - 10rem);
  overflow-anchor: none;
}

/* Material's mandatory scroll-snap costs the nav an 8px jump */
.md-nav--primary .md-nav__title ~ .md-nav__list {
  scroll-snap-type: none;
}

@view-transition {
  navigation: auto;
}
.md-header { view-transition-name: md-header; }
#headerTopBanner { view-transition-name: md-banner; }
.md-sidebar--primary { view-transition-name: md-sidebar-primary; }
.md-footer { view-transition-name: md-footer; }
.md-content { view-transition-name: md-content; }

::view-transition-group(md-header),
::view-transition-group(md-banner),
::view-transition-group(md-sidebar-primary),
::view-transition-group(md-footer) {
  animation-duration: 1ms;
}
::view-transition-group(md-content),
::view-transition-old(md-content),
::view-transition-new(md-content) {
  animation-duration: var(--ui-t-dur);
}

/* A language switch rewrites the chrome as well, so the page crossfades whole.
   The pseudos hang off <html>, above the roles on <body>, hence the literal. */
html:active-view-transition-type(locale) :is(.md-header, #headerTopBanner, .md-sidebar--primary, .md-footer, .md-content) {
  view-transition-name: none;
}
html:active-view-transition-type(locale)::view-transition-old(root),
html:active-view-transition-type(locale)::view-transition-new(root) {
  animation-duration: .3s;
}

@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*) {
    animation: none !important;
  }
}

.md-path {
  min-height: 1.2rem;
  line-height: 1.2rem;
}
.md-path__item {
  line-height: 1.2rem;
}

/* The strip paints nothing: its fade ended in --md-code-bg-color, which is not the
   ground of every block it rides (the command well is --rcp-term-bg), so on those
   it laid a second value over the first and read as a band. The button carries its
   own opaque fill, which is what actually occludes the code beneath it. */
.md-typeset .md-code__nav {
  top: 0;
  right: 0;
  padding: var(--sp-8) var(--sp-10);
  background: none;
  border-start-end-radius: var(--ui-radius);
}
.md-typeset .md-code__button[data-md-type="copy"] {
  width: auto;
  height: auto;
  display: inline-flex;
  align-items: center;
  gap: .4em;
  padding: var(--sp-4) var(--sp-10);
  border: var(--ui-hairline-w) solid var(--rcp-term-bd);
  border-radius: var(--ui-radius-sm);
  background: var(--rcp-term-btn);
  color: var(--rcp-term-dim);
  font-family: var(--rcp-sans);
  font-size: var(--fs-12);
  transition: color var(--ui-t-control), border-color var(--ui-t-control),
              background-color var(--ui-t-control);
}
.md-typeset .md-code__button[data-md-type="copy"]:hover {
  color: var(--rcp-term-text);
  border-color: var(--rcp-accent);
}
.md-typeset .md-code__button[data-md-type="copy"]::before {
  content: "";
  display: block;
  width: 1.05em;
  height: 1.05em;
  background-color: currentcolor;
  -webkit-mask-image: var(--md-code-copy-icon);
  mask-image: var(--md-code-copy-icon);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}
.md-typeset .md-code__button[data-md-type="copy"]::after {
  content: "Copy";
  width: auto;
  height: auto;
  margin: 0;
  background: none;
  -webkit-mask-image: none;
  mask-image: none;
}
.md-typeset .md-code__button[data-md-type="copy"].is-copied {
  background: var(--rcp-pill-bg);
  color: var(--rcp-accent);
  border-color: var(--rcp-pill-bg);
}
.md-typeset .md-code__button[data-md-type="copy"].is-copied::before {
  -webkit-mask-image: var(--rcp-check-icon);
  mask-image: var(--rcp-check-icon);
}
.md-typeset .md-code__button[data-md-type="copy"].is-copied::after {
  content: "Copied";
}
html[lang="ko"] .md-typeset .md-code__button[data-md-type="copy"]::after { content: "복사"; }
html[lang="ko"] .md-typeset .md-code__button[data-md-type="copy"].is-copied::after { content: "복사됨"; }


.md-typeset .phase-highlight {
  font-weight: var(--ui-fw-strong);
}

.md-typeset .phase-fade {
  color: var(--rcp-muted);
}

.md-typeset .tg-code {
  font-family: var(--rcp-mono);
  font-size: var(--fs-12);
  text-align: center;
  vertical-align: middle;
}

.md-typeset .tg-code-phase {
  font-family: var(--rcp-mono);
  font-size: var(--fs-12);
  margin: var(--sp-2) 0;
}

/* The row a `?mz=` search result pointed at; table_filter.js drops the class after a moment. */
.md-typeset tbody tr.is-revealed {
  background-color: var(--md-accent-fg-color--transparent);
  transition: background-color 1.2s ease-out;
}
.md-typeset .table-filter-wrapper {
  display: flex;
  align-items: center;
  gap: var(--sp-8);
  margin-bottom: var(--sp-12);
}

.md-typeset .table-filter-wrapper svg {
  opacity: var(--ui-disabled);
  vertical-align: middle;
}

.md-typeset .table-filter-wrapper input {
  width: 100%;
  max-width: 360px;
  padding: var(--sp-8) var(--sp-12);
  border: var(--ui-hairline-w) solid var(--rcp-border);
  border-radius: var(--ui-radius);
  font-size: var(--fs-14);
  background: var(--md-default-bg-color);
  color: var(--md-default-fg-color);
}

/* The product choice, in the header and on the landing page. It is the same
   control as the install matrix's chip rows, so it borrows that vocabulary
   rather than inventing a second one: a resting chip, and a filled chip for
   the choice in force. */
/* In the card the label opens the row and the choice closes it, so the eye lands
   on what it can press. In the header there is no room for that, and none needed. */
.rbln-product {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-16);
}
.md-typeset .rbln-product { display: flex; justify-content: space-between; }
/* the pair is joined, so the gap above separates the label from the choice and
   never the two halves of it */
.rbln-product__choices { display: inline-flex; }
.rbln-product__label {
  color: var(--ui-label-fg);
  font-size: var(--ui-label-fs);
  font-weight: var(--ui-label-fw);
  letter-spacing: var(--ui-label-ls);
  text-transform: uppercase;
}
.rbln-product__choice {
  padding: var(--ui-chip-pad);
  border: var(--ui-hairline-w) solid var(--rcp-chip-bd);
  border-radius: var(--ui-radius);
  background: var(--rcp-chip-bg);
  color: var(--rcp-text);
  cursor: pointer;
  font-size: var(--ui-fs-mono);
  line-height: var(--ui-lh-control);
  transition: background-color var(--ui-t-control), color var(--ui-t-control), border-color var(--ui-t-control);
}
/* The two sit joined, sharing one edge: this is a choice between them, not two
   buttons that happen to be adjacent. */
.rbln-product__choice:not(:last-child) { border-start-end-radius: 0; border-end-end-radius: 0; }
.rbln-product__choice:not(:first-of-type) {
  margin-inline-start: calc(-1 * var(--ui-hairline-w));
  border-start-start-radius: 0;
  border-end-start-radius: 0;
}
.rbln-product__choice[aria-pressed='true'] { position: relative; z-index: 1; }
/* On a phone the title is hidden, but its margins pushed the controls off-screen. */
@media (max-width: 25em) {
  [dir] .md-header .md-header__title { margin-inline: 0; }
}
@media (max-width: 22.5em) {
  .md-header .rbln-product__choice { padding-inline: var(--sp-6); }
}
.rbln-product__choice:hover { border-color: var(--rcp-accent); }
.rbln-product__choice[aria-pressed='true'] {
  border-color: var(--rcp-chip-on-bd);
  background: var(--rcp-chip-on-bg);
  color: var(--rcp-chip-on-fg);
}
.rbln-product__choice:focus-visible { outline: 2px solid var(--rcp-accent); outline-offset: 1px; }
.md-header__inner .rbln-product { margin-inline-end: var(--sp-8); }

.md-typeset .rbln-product-figure img {
  width: calc(100% - 2 * clamp(var(--sp-16), 4vw, var(--sp-40)));
}

/* On the landing page the two stack, and the line about the chosen one sits
   beside them. The header keeps the row: there is no width for anything else. */
.rbln-product--stacked,
.rbln-product--stacked .rbln-product__choices {
  display: grid;
  grid-template-columns: max-content 1fr;
  align-items: center;
  column-gap: var(--sp-20);
  row-gap: 0;
  width: 100%;
}
.rbln-product--stacked { display: block; }
/* Stacked, the pair reads as one block, so it keeps square corners rather than
   rounding away from the column it forms. */
.rbln-product--stacked .rbln-product__choice { border-radius: 0; }
.rbln-product--stacked .rbln-product__choice:not(:first-of-type) {
  margin-inline-start: 0;
  margin-block-start: calc(-1 * var(--ui-hairline-w));
}
.rbln-product__blurb { margin: 0; color: var(--rcp-text); }
/* the tail is spelled out but unseen, so it holds the space it will need */
.rbln-product__rest { visibility: hidden; }
.rbln-product__blurb--idle { visibility: hidden; }

/* room js/relayout.js keeps below the page while a press shortened it, so what
   was pressed need not move to fit; it shrinks as the reader scrolls back up.
   :root, because the script writes it on <html> and a nearer declaration would win. */
:root {
  --rbln-room: 0px;
}
.md-container {
  padding-block-end: var(--rbln-room);
}
