:root {
  color-scheme: light;

  --bg: #ffffff;
  --text: #111111;
  --muted: #444444;
  --border: #d0d0d0;
  --panel: #f7f7f7;
  --code-bg: #fafafa;
  --accent: #0b3b6f;
  --link: #155eab;

  --hl-comment: #6a737d;
  --hl-key: #d73a49;
  --hl-string: #032f62;
  --hl-number: #005cc5;
  --hl-title: #6f42c1;
  --hl-variable: #e36209;
  --hl-meta: #735c0f;

  --plain-accent: #2e7d32;
  --plain-bg: #f2f8f3;
  --target-glow: #fff3cd;
}

@media print {
  :root {
    --bg: #ffffff;
    --text: #000000;
    --muted: #222222;
    --border: #777777;
    --panel: #ffffff;
    --code-bg: #ffffff;
    --accent: #000000;
    --link: #000000;

    --hl-comment: #555555;
    --hl-key: #000000;
    --hl-string: #222222;
    --hl-number: #222222;
    --hl-title: #000000;
    --hl-variable: #222222;
    --hl-meta: #222222;

    --plain-accent: #000000;
    --plain-bg: #ffffff;
    --target-glow: #ffffff;
  }
}

* {
  box-sizing: border-box;
}

html {
  background: var(--bg);
  color: var(--text);
}

body {
  margin: 0;
  font-family: Calibri, "Segoe UI", Arial, Helvetica, sans-serif;
  line-height: 1.5;
  font-size: clamp(16px, 1.02rem, 18px);
}

.paper {
  max-width: min(920px, 94vw);
  margin: 0 auto;
  padding: clamp(1rem, 3vw, 2.5rem) clamp(0.75rem, 3vw, 2rem) 3rem;
  counter-reset: section listing table;
}

header.titleblock {
  border-bottom: 3px double var(--muted);
  padding-bottom: 1rem;
  margin-bottom: 1.2rem;
}

h1 {
  font-size: clamp(1.7rem, 4vw, 2.35rem);
  line-height: 1.12;
  margin: 0 0 0.35rem;
  color: var(--accent);
}

.subtitle {
  font-size: clamp(1rem, 2.5vw, 1.2rem);
  color: var(--muted);
  margin: 0 0 0.7rem;
}

.metadata {
  font-size: 0.95rem;
  color: var(--muted);
}

.metadata p {
  margin: 0.15rem 0;
}

h2,
h3,
h4 {
  color: var(--accent);
  line-height: 1.2;
  overflow-wrap: anywhere;
}

h2 {
  font-size: clamp(1.25rem, 3vw, 1.5rem);
  margin: 1.7rem 0 0.55rem;
  border-bottom: 1px solid var(--border);
  padding-bottom: 0.18rem;
  page-break-after: avoid;
  break-after: avoid;
  counter-reset: subsection;
}

h2::before {
  counter-increment: section;
  content: counter(section) ". ";
}

h2.unnumbered::before {
  content: none;
  counter-increment: none;
}

h3 {
  font-size: clamp(1.05rem, 2.5vw, 1.2rem);
  margin: 1.15rem 0 0.4rem;
  page-break-after: avoid;
  break-after: avoid;
}

h3::before {
  counter-increment: subsection;
  content: counter(section) "." counter(subsection) " ";
}

h3.unnumbered::before {
  content: none;
  counter-increment: none;
}

p {
  margin: 0.55rem 0;
  text-align: justify;
  hyphens: auto;
}

ul,
ol {
  margin: 0.55rem 0 0.55rem 1.3rem;
  padding: 0;
}

li {
  margin: 0.28rem 0;
  text-align: justify;
}

code {
  font-family: Consolas, "Cascadia Code", "JetBrains Mono", "Courier New", monospace;
  font-size: 0.92em;
  background: var(--panel);
  border: 1px solid var(--border);
  padding: 0 0.18em;
  border-radius: 4px;
  overflow-wrap: anywhere;
}

a {
  color: var(--link);
  word-break: break-word;
}

.abstract {
  border-left: 4px solid var(--accent);
  background: var(--panel);
  padding: 0.8rem 1rem;
  margin: 0 0 1rem;
  page-break-inside: avoid;
  break-inside: avoid;
  border-radius: 6px;
}

.abstract h2 {
  margin-top: 0;
  border: none;
}

.keywords {
  font-size: 0.92rem;
  margin-top: 0.55rem;
}

.plain {
  border-left: 4px solid var(--plain-accent);
  background: var(--plain-bg);
  padding: 0.7rem 0.95rem;
  margin: 0.7rem 0 1rem;
  border-radius: 6px;
  page-break-inside: avoid;
  break-inside: avoid;
}

.plain .plain-label {
  display: block;
  color: var(--plain-accent);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.74rem;
  font-weight: 700;
  margin-bottom: 0.3rem;
}

.plain p {
  margin: 0;
  text-align: left;
}

.plain p + p {
  margin-top: 0.5rem;
}

nav.toc {
  border: 1px solid var(--border);
  background: var(--panel);
  border-radius: 8px;
  padding: 0.9rem 1.1rem 1.05rem;
  margin: 0 0 1.2rem;
  page-break-inside: avoid;
  break-inside: avoid;
}

nav.toc h2 {
  margin-top: 0;
  border: none;
  padding-bottom: 0;
}

nav.toc ol {
  list-style: none;
  margin: 0.3rem 0 0;
  padding: 0;
  counter-reset: none;
}

nav.toc li {
  margin: 0.22rem 0;
  text-align: left;
}

nav.toc li.toc-sub {
  margin-left: 1.1rem;
  font-size: 0.95em;
}

nav.toc a {
  display: flex;
  align-items: baseline;
  gap: 0.4em;
  text-decoration: none;
  color: var(--text);
}

nav.toc a::after {
  content: "";
  flex: 1 1 auto;
  order: 2;
  border-bottom: 1px dotted var(--border);
  margin: 0 0.3em 0.2em;
}

nav.toc a .toc-num {
  order: 0;
  color: var(--muted);
  min-width: 1.6em;
}

nav.toc a .toc-text {
  order: 1;
}

nav.toc a:hover,
nav.toc a:focus-visible {
  color: var(--accent);
}

a.citation {
  color: var(--link);
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

a.citation:hover,
a.citation:focus-visible {
  text-decoration: underline;
}

:target {
  animation: target-flash 2.4s ease-out 1;
}

.references li:target {
  background: var(--target-glow);
  border-radius: 4px;
  outline: 1px solid var(--border);
  padding: 0.15rem 0.35rem;
  margin-left: -0.35rem;
}

@keyframes target-flash {
  from {
    background: var(--target-glow);
  }
  to {
    background: transparent;
  }
}

.glossary dl {
  margin: 0.6rem 0;
}

.glossary dt {
  font-weight: 700;
  color: var(--accent);
  margin-top: 0.75rem;
}

.glossary dd {
  margin: 0.2rem 0 0;
  text-align: justify;
  hyphens: auto;
}

@media print {
  .plain {
    border-left-color: #000;
    background: #fff;
  }

  nav.toc {
    display: none;
  }

  :target {
    animation: none;
  }
}

.table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  margin: 1rem 0;
}

table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.92rem;
  page-break-inside: avoid;
  break-inside: avoid;
  min-width: 640px;
}

caption {
  caption-side: top;
  text-align: left;
  font-size: 0.95rem;
  font-weight: 700;
  padding: 0 0 0.35rem;
}

caption::before {
  counter-increment: table;
  content: "Table " counter(table) ". ";
}

th,
td {
  border: 1px solid var(--border);
  padding: 0.42rem 0.5rem;
  vertical-align: top;
  text-align: left;
}

th {
  background: var(--panel);
}

figure.listing {
  margin: 1.1rem 0;
  border: 1px solid var(--border);
  background: var(--code-bg);
  page-break-inside: avoid;
  break-inside: avoid;
  border-radius: 8px;
  overflow: hidden;
}

figure.listing figcaption {
  font-size: 0.92rem;
  font-weight: 700;
  background: var(--panel);
  border-bottom: 1px solid var(--border);
  padding: 0.45rem 0.65rem;
  page-break-after: avoid;
  break-after: avoid;
}

figure.listing figcaption::before {
  counter-increment: listing;
  content: "Listing " counter(listing) ". ";
}

pre {
  margin: 0;
  padding: 0.65rem;
  overflow: auto;
  background: transparent;
  position: relative;
}

pre code,
pre code.hljs {
  display: block;
  border: none;
  background: transparent;
  padding: 0;
  font-family: Consolas, "Cascadia Code", "JetBrains Mono", "Courier New", monospace;
  font-size: 0.88rem;
  line-height: 1.18;
  white-space: pre-wrap;
  word-break: break-word;
  overflow-wrap: anywhere;
  tab-size: 4;
  color: var(--text);
}

.hljs {
  color: var(--text);
  background: transparent;
}

.hljs-comment,
.hljs-quote {
  color: var(--hl-comment);
  font-style: italic;
}

.hljs-keyword,
.hljs-built_in,
.hljs-literal,
.hljs-type {
  color: var(--hl-key);
}

.hljs-string,
.hljs-regexp,
.hljs-addition {
  color: var(--hl-string);
}

.hljs-number,
.hljs-symbol,
.hljs-bullet {
  color: var(--hl-number);
}

.hljs-title,
.hljs-section,
.hljs-name,
.hljs-attr,
.hljs-attribute {
  color: var(--hl-title);
}

.hljs-variable,
.hljs-template-variable,
.hljs-params {
  color: var(--hl-variable);
}

.hljs-meta {
  color: var(--hl-meta);
}

.hljs-emphasis {
  font-style: italic;
}

.hljs-strong {
  font-weight: 700;
}

.hljs-copy-wrapper {
  background: transparent;
}

.hljs-copy-container {
  z-index: 5;
}

.hljs-copy-button {
  background: var(--panel);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  font-family: inherit;
}

.hljs-copy-button:hover {
  filter: brightness(1.05);
}

.references ol {
  margin-left: 1.2rem;
}

.references li {
  margin: 0.45rem 0;
  padding-left: 0.2rem;
}

@page {
  size: A4;
  margin: 20mm 18mm 18mm 18mm;

  @bottom-right {
    content: "Page " counter(page) " of " counter(pages);
    font-family: Calibri, "Segoe UI", Arial, Helvetica, sans-serif;
    font-size: 8.5pt;
    color: #555;
  }
}

@media print {
  body {
    font-size: 11pt;
  }

  .paper {
    max-width: none;
    padding: 0;
  }

  .hljs-copy-container,
  .hljs-copy-alert {
    display: none !important;
  }

  h1 {
    font-size: 21pt;
  }

  .subtitle {
    font-size: 12pt;
  }

  h2 {
    font-size: 14pt;
  }

  h3 {
    font-size: 12pt;
  }

  p,
  li {
    orphans: 2;
    widows: 2;
  }

  figure.listing {
    border: 1px solid #777;
    page-break-inside: avoid;
    break-inside: avoid;
  }

  pre {
    overflow: hidden;
  }

  pre code,
  pre code.hljs {
    font-size: 7.4pt;
    line-height: 1.16;
  }

  table {
    font-size: 8.8pt;
    min-width: 0;
  }

  .table-wrap {
    overflow: visible;
  }

  pre code.hljs,
  .hljs,
  .hljs * {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }
}
