:root {
  --red: #E00000;
  --black: #181818;
  --notsoblack: #262626;
  --topbar-height: 56px;
  --topbar-border: 5px;
}

/* ── Global body ────────────────────────────────────────────── */

body {
  margin: 0;
  background-color: white;
  padding-bottom: 36px;
  color: var(--black);
}

/* ── Global site header ─────────────────────────────────────── */

#topbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: var(--topbar-height);
  padding: 0.5rem 0;
  border-bottom: var(--topbar-border) solid var(--red);
  background-color: var(--black);
  color: white;
  z-index: 1000;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  overflow: visible;
}

#topbar-logo-wrapper {
  width: 15rem;
  flex-shrink: 0;
  display: flex;
  justify-content: center;
  align-items: center;
}

#topbar-logo-wrapper a {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  margin: 0;
}

#topbar-logo {
  height: 34px;
  width: auto;
  display: block;
  transition: transform 0.2s;
}

#topbar-logo:hover {
  transform: scale(1.05);
}

#topbar-nav {
  display: flex;
  margin-left: auto;
  align-items: stretch;
  margin-right: 1rem;
  align-self: stretch;
  margin-top: calc(-0.5rem);
  margin-bottom: calc(-0.5rem - var(--topbar-border));
}

#topbar-nav a {
  color: white;
  text-decoration: none;
  font-size: 0.95rem;
  transition: color 0.2s;
  padding: 0 1.2rem;
  padding-bottom: var(--topbar-border);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
}

#topbar-nav > a:not(:last-child)::after,
#topbar-docs-dropdown::after {
  content: "";
  position: absolute;
  right: 0;
  top: 50%;
  transform: translateY(calc(-50% - var(--topbar-border) / 2));
  width: 1px;
  height: 1.2rem;
  background-color: var(--red);
}

#topbar-nav a:hover,
#topbar-docs-dropdown:hover > a {
  color: var(--red);
}

/* Documentation dropdown */
#topbar-docs-dropdown {
  position: relative;
  display: flex;
  align-items: stretch;
}

#topbar-docs-dropdown > a {
  padding-bottom: var(--topbar-border);
}

#topbar-docs-dropdown > a::after {
  content: none !important;
}

#topbar-docs-menu {
  display: none;
  position: fixed;
  top: var(--topbar-height);
  background-color: var(--black);
  min-width: 10rem;
  flex-direction: column;
  z-index: 200;
  border-bottom: var(--topbar-border) solid var(--red);
}

#topbar-docs-dropdown:hover #topbar-docs-menu {
  display: flex;
}

#topbar-docs-menu a {
  padding: 0.6rem 1.2rem !important;
  justify-content: flex-start !important;
  white-space: nowrap;
}

#topbar-docs-menu a:not(:last-child) {
  position: relative;
}

#topbar-docs-menu a:not(:last-child)::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 5%;
  width: 90%;
  height: 1px;
  background-color: var(--red);
}

#topbar-docs-menu a:last-child::after {
  display: none !important;
}

/* Hamburger menu button — hidden on desktop */
#topbar-menu-toggle {
  display: none;
  background: none;
  border: none;
  color: white;
  font-size: 1.5rem;
  cursor: pointer;
  margin-left: auto;
  margin-right: 1rem;
  padding: 0 0.5rem;
}

#topbar-menu-toggle:hover {
  color: var(--red);
}

@media screen and (max-width: 1350px) {
  #topbar .breadcrumbs {
    display: none !important;
  }
}

@media screen and (max-width: 850px) {
  #topbar-menu-toggle {
    display: block;
  }

  #topbar-nav {
    display: none;
    position: absolute;
    top: calc(var(--topbar-height) + var(--topbar-border));
    left: 0;
    right: 0;
    flex-direction: column;
    background-color: var(--black);
    border-bottom: var(--topbar-border) solid var(--red);
    padding: 0.5rem 0;
  }

  #topbar-nav.open {
    display: flex;
  }

  #topbar-nav a {
    padding: 0.75rem 2rem;
    justify-content: flex-start;
  }

  #topbar-nav a:not(:last-child)::after {
    display: none;
  }

  #topbar-docs-menu {
    position: static;
    border-top: none;
    border-left: 2px solid var(--red);
    margin-left: 2rem;
  }

  #topbar-docs-dropdown:hover #topbar-docs-menu {
    display: flex;
  }
}

#topbar .breadcrumbs {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 15rem;
  font-size: 0.85rem;
  color: #aaa;
  display: flex;
  align-items: center;
  gap: 0.25rem;
}

#topbar .breadcrumbs::before {
  content: "›";
  margin-right: 0.5rem;
  color: #aaa;
  font-size: 1.8em;
  position: relative;
  top: -0.08em;
  display: inline-block;
}

#topbar .breadcrumbs ul {
  display: flex;
  list-style: none;
  margin: 0;
  padding: 0;
  gap: 0.5rem;
}

#topbar .breadcrumbs li {
  display: inline;
}

#topbar .breadcrumbs li:not(:last-child)::after {
  content: "›";
  margin: 0 0.3rem 0 0.05rem;
  color: #aaa;
  font-size: 1.2em;
  position: relative;
  top: -0.01em;
  display: inline-block;
  line-height: 1;
}

#topbar .breadcrumbs a {
  color: #aaa;
  text-decoration: none;
}

#topbar .breadcrumbs a:hover {
  color: var(--red);
}

/* ── Global site footer ─────────────────────────────────────── */

#sitefooter {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 36px;
  padding: 0 2rem;
  border-top: 0.2em solid var(--red);
  background-color: var(--black);
  color: white;
  box-sizing: border-box;
  display: flex;
  align-items: center;
  justify-content: space-between;
  font-size: 0.85rem;
  z-index: 1000;
}

/* ── Navigation panel ──────────────────────────────────────── */

.nav {
  height: calc(100vh - var(--topbar-height) - var(--topbar-border) - 36px) !important;
}

.nav-panel-menu {
  height: 100% !important;
}

/* Separator line between nav and body */
.nav-container::after {
  content: "";
  position: fixed;
  top: calc(var(--topbar-height) + var(--topbar-border));
  left: 15rem;
  width: 1px;
  height: calc(100vh - var(--topbar-height) - var(--topbar-border) - 36px);
  background: linear-gradient(
    to bottom,
    var(--notsoblack) 0px,
    var(--notsoblack) 75%,
    white 85%
  );
  pointer-events: none;
  z-index: 100;
}

/* ── Hide unwanted Antora UI elements ───────────────────────── */

/* Replaced by #topbar */
.header { display: none; }

/* Not useful for a single-version site */
.nav-panel-explore { display: none !important; }

/* Visitors cannot edit pages */
.edit-this-page { display: none !important; }

/* Breadcrumb and toolbar moved into header */
.toolbar { display: none !important; }

/* ── Typography ─────────────────────────────────────────────── */

h1, h2, h3, h4, h5, h6 {
  color: var(--black);
}

h1 {
  text-align: center;
  margin-top: 5rem !important;
  margin-bottom: 6rem !important;
}

h1, h2 {
  text-decoration: underline var(--red) 0.1em;
  border: none !important;
  box-shadow: none !important;
}

h2 {
  margin-top: 3rem !important;
}

h3 {
  font-size: 1.3em;
}

.doc h3 {
  margin-top: 3rem !important;
  margin-bottom: 1.5rem !important;
}

code, pre {
  font-size: 0.9rem;
}

.doc code {
  background: none;
  padding: 0;
}

.doc a code {
  color: inherit;
}

/* ── Source-file code blocks (dark theme) ───────────────────── */

.doc .listingblock.source-file pre.highlightjs {
  background-color: var(--notsoblack);
  border: 2px solid var(--red);
  box-shadow: none;
  padding: 0.5em 1.2em 1.2em 0;
  overflow-wrap: normal;
  white-space: pre;
  overflow-x: auto;
}

.doc .listingblock.source-file pre.highlightjs code.hljs {
  background-color: transparent;
  color: #f0f0f0;
  box-shadow: none;
  padding: 0;
  display: block;
}

.doc .listingblock.source-file table.hljs-ln {
  border-collapse: collapse;
  border-spacing: 0;
  width: 100%;
}

.doc .listingblock.source-file table.hljs-ln tr {
  border: none;
}

.doc .listingblock.source-file td.hljs-ln-n {
  white-space: nowrap;
  padding: 0 0.8em 0 0;
  text-align: right;
  vertical-align: top;
  min-width: 2.5em;
  color: #555;
  border-right: 1px solid #333;
  border-bottom: none;
  user-select: none;
  -webkit-user-select: none;
}

.doc .listingblock.source-file td.hljs-ln-n::before {
  content: attr(data-line-number);
}

.doc .listingblock.source-file td.hljs-ln-code {
  padding: 0 0 0 0.8em;
  white-space: pre;
  border-bottom: none;
  vertical-align: top;
}

.doc .listingblock.source-file .hljs-keyword,
.doc .listingblock.source-file .hljs-built_in,
.doc .listingblock.source-file .hljs-selector-tag {
  color: var(--red);
  font-weight: bold;
}

.doc .listingblock.source-file .source-toolbox {
  background-color: var(--notsoblack);
}

.doc .listingblock.source-file .hljs-comment,
.doc .listingblock.source-file .hljs-quote {
  color: #888;
  font-style: italic;
}

.doc .listingblock.source-file .hljs-string,
.doc .listingblock.source-file .hljs-regexp {
  color: #a8d080;
}

.doc .listingblock.source-file .hljs-number,
.doc .listingblock.source-file .hljs-literal {
  color: #8dd;
}

.doc .listingblock.source-file .hljs-meta,
.doc .listingblock.source-file .hljs-meta .hljs-keyword {
  color: #c8a060;
}

.doc .listingblock.source-file .hljs-type,
.doc .listingblock.source-file .hljs-title,
.doc .listingblock.source-file .hljs-title.class_,
.doc .listingblock.source-file .hljs-title.function_,
.doc .listingblock.source-file .hljs-class .hljs-title {
  color: #f0f0f0;
  font-weight: bold;
}


.doc .listingblock.source-file .source-lang,
.doc .listingblock.source-file .copy-button {
  color: #666;
}

/* Chain-link icon for section anchors */
.doc h1 .anchor::before,
.doc h2 .anchor::before,
.doc h3 .anchor::before,
.doc h4 .anchor::before,
.doc h5 .anchor::before,
.doc h6 .anchor::before {
  content: "";
  display: inline-block;
  width: 0.85em;
  height: 0.85em;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71'/%3E%3Cpath d='M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-size: contain;
  vertical-align: middle;
}

/* Wider content area */
.doc {
  max-width: 55rem !important;
  width: 100%;
  box-sizing: border-box;
}

/* TOC panel fixed to right edge */
aside.toc.sidebar {
  position: fixed !important;
  right: 0;
  top: calc(var(--topbar-height) + var(--topbar-border));
  height: calc(100vh - var(--topbar-height) - var(--topbar-border) - 36px);
  display: block !important;
  flex: none !important;
  width: 12rem;
  z-index: 100;
}

/* Never show the embedded (inline) TOC */
aside.toc.embedded {
  display: none !important;
}

/* Reserve space for fixed TOC; center content in the remaining space */
.body {
  margin-right: 12rem;
}

main.article {
  min-width: 0;
}

main > .content {
  overflow-x: visible !important;
  min-width: 0;
  width: 100%;
  justify-content: center;
}

/* Hide TOC when it would squeeze the body content */
@media screen and (max-width: 90rem) {
  aside.toc.sidebar {
    display: none !important;
  }
  .body {
    margin-right: 0;
  }
}

/* Link styles */
.content a,
main a,
.doc a {
  color: var(--black);
  font-weight: normal;
  text-decoration: underline;
  text-decoration-color: var(--red);
}

.content a:hover,
main a:hover,
.doc a:hover {
  color: var(--red) !important;
}

.nav a:hover {
  color: var(--red) !important;
  text-decoration: none !important;
}

/* Notsoblack color for navigation item toggle icons (wedges) */
.nav-item-toggle {
  filter: brightness(0) saturate(100%) invert(15%) !important;
}

/* Change TOC sidebar border color to match text */
.toc .toc-menu a {
  border-left-color: var(--black) !important;
  border-left-width: 1px !important;
  margin-left: 1px !important;
}

.toc .toc-menu a.is-active {
  border-left-color: var(--red) !important;
  border-left-width: 3px !important;
  margin-left: 0 !important;
}

/* ── Lists ──────────────────────────────────────────────────── */

.ulist ul,
.olist ol {
  margin-bottom: 0 !important;
  gap: 0 !important;
}

.ulist ul li,
.olist ol li {
  margin: 0 !important;
  padding: 0 !important;
}

.ulist li p,
.olist li p {
  margin: 0 !important;
  padding: 0 !important;
}

.dlist dt {
  margin: 0 !important;
}

.dlist dd {
  margin: 0 !important;
  margin-bottom: 0.2rem !important;
}

/* ── Tables ─────────────────────────────────────────────────── */

th, td {
  border-bottom: 1px solid #ddd;
  padding: 0;
}

p.tableblock {
  margin: 4px;
}

/* ── Reference documentation: classmember <details> blocks ─── */

.doc details.classmember {
  margin-left: 2em;
  margin-top: 0;
  padding-bottom: 0;
}

.doc details.classmember:first-child {
  margin-top: 2em;
}

.doc details.classmember > summary {
  list-style: none;
  cursor: pointer;
  margin-bottom: 0;
  position: static;
  line-height: normal;
}

.doc details.classmember > summary::before,
.doc details.classmember > summary::after {
  display: none;
}

.doc details.classmember > summary::-webkit-details-marker {
  display: none;
}

details.classmember summary table {
  display: inline-table;
  background-color: white;
  border-top: 0.05em solid var(--black);
  margin: 0;
  width: 100%;
}

details.classmember:last-of-type summary table {
  border-bottom: 0.05em solid var(--black);
}

details.classmember[open] summary table {
  background-color: var(--notsoblack);
  border-bottom: 0.2em solid var(--red);
  padding-bottom: 0.1em;
  color: white;
}

details.classmember[open] summary table code {
  color: inherit;
  background: none;
}

details.classmember summary td:first-of-type {
  font-weight: bold;
}

details.classmember[open] summary td:first-of-type {
  font-weight: normal;
}

details.classmember summary tr:first-of-type td {
  padding: 0.2em 1em;
  border-bottom: 0;
  vertical-align: middle;
}

details.classmember summary table td p {
  margin: 0;
}

details.classmember summary .paragraph {
  margin: 0;
}

details.classmember > .content {
  margin: 1em;
  margin-top: -1em;
  border: 0.1em solid var(--black);
  border-radius: 0.7em;
  border-top: 0;
  padding: 1em 1em 0.2em;
  background-color: #FBFCFE;
}

details.classmember th,
details.classmember td {
  border-bottom: 1px solid #ddd;
  padding: 0;
}

details.classmember p.tableblock {
  margin: 4px;
}

/* ── Expand / contract all toggle ──────────────────────────── */

.classmember-toggle {
  text-align: right;
  margin-left: 2em;
  margin-bottom: 0;
  font-size: 0.85em;
}

.classmember-toggle a {
  cursor: pointer;
  color: var(--black);
  text-decoration: none;
}

.classmember-toggle a:hover {
  color: var(--red);
}

/* ── Landing page ───────────────────────────────────────────── */
/* Override Antora's flex layout entirely for the landing page  */

.landing article.doc > h1.page:first-child { display: none; }

.landing aside.nav,
.landing aside.toc,
.landing .nav-container,
.landing .toolbar,
.landing .breadcrumbs { display: none !important; }

.landing .body {
  display: block !important;
  width: 1200px;
  max-width: 100%;
  margin: 0 auto !important;
  padding: 0 1rem;
  box-sizing: border-box;
}

.landing main {
  display: block !important;
  flex: none !important;
  min-width: 0 !important;
}

.landing main > .content {
  display: block !important;
  overflow: visible !important;
  max-width: 100% !important;
  margin: 0 !important;
}

.landing article.doc {
  max-width: 100% !important;
  margin: 0 !important;
  padding: 2rem 0 15rem 0;
}

@media (max-width: 768px) {
  .landing article.doc { padding: 1rem 0; }
}

@media (max-width: 480px) {
  .landing article.doc { padding: 0.5rem 0; }
}

.landing hr {
  border-color: var(--notsoblack);
  margin: 3rem 0;
  padding: 0;
}

.doc #footnotes {
  border-top: 1px solid var(--notsoblack);
  margin-top: 3rem;
  padding-top: 1rem;
}

.landing .sect1 {
  width: 80%;
  margin: 0 auto;
}

.landing .sectionbody > .paragraph:last-of-type {
  margin-bottom: 0;
}

.landing .sectionbody > .paragraph:last-of-type p {
  margin-bottom: 0;
}

.landing .text-center {
  margin-top: 3rem;
  margin-bottom: 6rem;
}

.landing .text-center p {
  margin-top: 0;
}

.landing .sect1:has(table.tableblock) {
  width: 100%;
}

.landing table.tableblock {
  display: flex !important;
  flex-wrap: wrap;
  justify-content: center;
  gap: 2rem;
  margin: 0 auto;
  margin-bottom: 3rem;
  border: none;
}

.landing table.tableblock colgroup {
  display: none;
}

.landing table.tableblock tbody,
.landing table.tableblock tr {
  display: contents;
}

.landing table.tableblock td {
  text-align: center;
  border: none !important;
  padding: 0 !important;
  width: 300px !important;
  min-width: 300px !important;
  max-width: 300px !important;
  height: 300px;
  flex: 0 0 300px !important;
  position: relative;
  overflow: hidden;
}

.landing table.tableblock td::after {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url('../img/card-borders.svg');
  background-size: 100% 100%;
  pointer-events: none;
  z-index: 10;
}

.landing table.tableblock td .content {
  display: flex !important;
  flex-direction: column;
  justify-content: space-between;
  align-items: center;
  height: 100%;
  width: 100%;
  padding: 1rem;
  position: relative;
  z-index: 1;
}

.landing table.tableblock td .imageblock {
  position: absolute !important;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  margin: 0 !important;
  z-index: -1;
  display: flex;
  align-items: center;
  justify-content: center;
}

.landing table.tableblock td .imageblock .content,
.landing table.tableblock td .imageblock a {
  display: block;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

.landing table.tableblock td .imageblock img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center center;
  display: block;
  transform: scale(1);
  transition: transform 0.3s ease;
}

.landing table.tableblock td:hover .imageblock img {
  transform: scale(1.07);
}

.landing table.tableblock td .paragraph {
  margin: 0;
  width: 100%;
}

.landing table.tableblock td .paragraph:first-child {
  order: -1;
}

.landing table.tableblock td strong a {
  color: var(--black) !important;
  text-decoration: underline var(--red) 0.1em;
  text-underline-offset: 0.2em;
  font-size: 1.5em;
  position: relative;
  z-index: 6;
}

.landing table.tableblock td strong a::after {
  content: '';
  position: absolute;
  inset: -1000px;
  z-index: -1;
}

.landing table.tableblock td strong a:hover {
  color: var(--red) !important;
}

.landing .text-center p {
  display: flex;
  justify-content: center;
}

.landing a.button {
  display: inline-block;
  color: white !important;
  background-color: var(--notsoblack);
  border: 3px solid var(--red);
  outline: none;
  box-shadow: 0 0 0 2px white;
  text-decoration: none !important;
  padding: calc(0.7em - 3px) calc(5em - 3px);
  font-size: 0.95rem;
  transition: color 0.2s, box-shadow 0.2s;
}

.landing a.button:hover {
  color: var(--red) !important;
  box-shadow: 0 0 0 2px var(--red);
}

.landing-logo {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-bottom: 4rem;
  position: relative;
}

.landing-logo-stripe {
  position: absolute;
  left: 0;
  right: 0;
  height: 10px;
  background-color: var(--red);
  z-index: 0;
  pointer-events: none;
}

.landing-logo img {
  height: 109px;
  width: auto;
  background-color: white;
  position: relative;
  z-index: 1;
  padding: 0.5rem 2rem;
  transition: transform 0.2s;
}

.landing-logo img:hover {
  transform: scale(1.1);
}

.cover-wrapper {
  display: block;
  width: 100%;
  margin: 0 0 4rem 0;
  overflow: hidden;
}

.cover-wrapper img {
  display: block;
  width: 100%;
  height: auto;
}
