:root {
    --slide-title-size: 1.05em;
    --slide-pad-top: 0.4em;
}

:root {
    --c-r: #d97706;
    --c-edge: #16a34a;
    --c-block: #dc2626;
    --c-active: #7c3aed;
    --c-s: #2563eb;
    --algo-code-bg: #f8fafc;
    --algo-code-fg: #1f2937;
    --algo-code-border: rgba(15, 23, 42, 0.16);
    --algo-code-shadow: rgba(15, 23, 42, 0.12);
    --algo-line-num: rgba(15, 23, 42, 0.36);
    --algo-highlight-fill: rgba(37, 99, 235, 0.11);
    --algo-highlight-stroke: rgba(37, 99, 235, 0.62);
    --algo-runtime-accent: #dc2626;
    --algo-runtime-muted: rgba(15, 23, 42, 0.62);
    --algo-keyword: #be123c;
    --algo-title: #15803d;
    --algo-param: #d97706;
    --algo-built: #4f46e5;
}

html[data-theme="dark"] {
    --c-r: #f6ad55;
    --c-edge: #68d391;
    --c-block: #e53e3e;
    --c-active: #bd93f9;
    --c-s: #63b3ed;
    --algo-code-bg: #272822;
    --algo-code-fg: #f8f8f2;
    --algo-code-border: rgba(248, 248, 242, 0.18);
    --algo-code-shadow: rgba(0, 0, 0, 0.26);
    --algo-line-num: rgba(248, 248, 242, 0.38);
    --algo-highlight-fill: rgba(102, 217, 239, 0.14);
    --algo-highlight-stroke: rgba(102, 217, 239, 0.62);
    --algo-runtime-accent: #ff5555;
    --algo-runtime-muted: rgba(248, 248, 242, 0.68);
    --algo-keyword: #f92672;
    --algo-title: #a6e22e;
    --algo-param: #fd971f;
    --algo-built: #66d9ef;
}

html[data-theme="dark"] {
    --r-background-color: #191919;
    --r-main-color: #fff;
    --r-heading-color: #fff;
    --r-link-color: #42affa;
    --r-link-color-dark: rgb(20, 155, 249);
    --r-link-color-hover: rgb(94, 187, 251);
    --r-selection-background-color: rgb(5, 121, 200);
    --r-overlay-element-bg-color: 240, 240, 240;
    --r-overlay-element-fg-color: 0, 0, 0;
}

html[data-theme="dark"] section.has-light-background,
html[data-theme="dark"] section.has-light-background h1,
html[data-theme="dark"] section.has-light-background h2,
html[data-theme="dark"] section.has-light-background h3,
html[data-theme="dark"] section.has-light-background h4,
html[data-theme="dark"] section.has-light-background h5,
html[data-theme="dark"] section.has-light-background h6 {
    color: #222;
}

body {
    min-height: 100vh;
    overflow: hidden;
}

#proximity-canvas {
    position: fixed;
    top: 0;
    left: 0;
    width: 100vw;
    height: 100vh;
    z-index: 0;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.8s ease;
}

body.is-title-slide #proximity-canvas {
    opacity: 1;
}

body:not(.is-title-slide) #proximity-canvas {
    opacity: 0 !important;
}

.reveal {
    position: relative;
    z-index: 1;
}

.reveal.overview-deactivating .slides section:not([data-transition]),
.reveal.overview-deactivating .slides > section > section:not([data-transition]) {
    transition: none;
}

.reveal .slides {
    opacity: 0;
}

body.slides-ready .reveal .slides {
    opacity: 1;
    transition: opacity 0.25s ease;
}

.reveal .slides section.title-slide {
    display: grid !important;
    align-content: center;
    justify-items: center;
    row-gap: clamp(20px, 3vh, 32px);
    min-height: 100%;
    text-align: center;
}

.reveal .slides section.title-slide h1 {
    margin: 0;
    max-width: min(94vw, 1180px);
    font-size: clamp(2.4rem, 6.8vw, 5.9rem);
    line-height: 1;
    letter-spacing: 0;
    text-wrap: balance;
    text-shadow: 0 18px 54px rgba(0, 0, 0, 0.45);
}

.reveal .slides section.title-slide p {
    margin: 0;
    font-size: clamp(1.1rem, 2.5vw, 1.8rem);
    letter-spacing: 0;
}

.reveal .slides section.prox-slide {
    display: grid !important;
    grid-template-rows: auto minmax(0, 1fr);
    align-content: start;
    justify-items: center;
    height: 100%;
    padding-top: var(--slide-pad-top);
    box-sizing: border-box;
    row-gap: 0.5em;
    text-align: center;
}

.reveal .slides section.prox-slide .prox-title {
    margin: 0;
    font-size: var(--slide-title-size);
    font-weight: 600;
    letter-spacing: 0.01em;
    text-transform: none;
}

.reveal .slides section.prox-slide .prox-body {
    display: flex;
    align-items: center;
    gap: 1em;
    width: 100%;
    height: 560px;
    max-height: 100%;
    align-self: center;
}

.reveal .slides section.prox-slide .prox-stage {
    flex: 2.2;
    height: 100%;
    min-width: 0;
}

.reveal .slides section.prox-slide canvas {
    width: 100%;
    height: 100%;
    display: block;
}

.reveal .slides section.prox-slide .prox-caption {
    flex: 1;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0.55em;
    text-align: left;
    font-size: 0.5em;
    line-height: 1.35;
}

.reveal .slides section.prox-slide .prox-caption p {
    margin: 0;
    opacity: 0.4;
    padding-left: 0.6em;
    border-left: 3px solid transparent;
    transition: opacity 0.3s ease, border-color 0.3s ease;
}

.reveal .slides section.prox-slide .prox-caption p.prox-active {
    opacity: 1;
    border-left-color: rgba(128, 128, 128, 0.5);
}

.reveal .slides section.prox-slide .step-only {
    display: none;
}

.reveal .slides section.prox-slide .prox-caption b {
    font-weight: 700;
}

.reveal .slides section.prox-slide .prox-caption .k-active { color: var(--c-active); }
.reveal .slides section.prox-slide .prox-caption .k-s { color: var(--c-s); }
.reveal .slides section.prox-slide .prox-caption .k-r { color: var(--c-r); }
.reveal .slides section.prox-slide .prox-caption .k-edge { color: var(--c-edge); }
.reveal .slides section.prox-slide .prox-caption .k-block { color: var(--c-block); }
.reveal .slides section.prox-slide .prox-caption .k-angle { color: var(--c-s); }

.reveal .slides section.prox-slide.caption-auto .prox-caption {
    flex: 0 0 auto;
    width: 0;
    padding: 0;
    overflow: hidden;
    transition: width 0.6s ease;
}

.reveal .slides section.prox-slide.caption-auto:has(.prox-caption .caption-open.visible) .prox-caption {
    width: 30%;
}

.reveal .binom {
    display: inline-flex;
    align-items: center;
    vertical-align: middle;
}

.reveal .binom .paren {
    font-size: 1.9em;
    font-weight: 300;
    line-height: 0.8;
}

.reveal .binom .col {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    line-height: 1.05;
    font-size: 0.72em;
    padding: 0 0.08em;
}

.reveal .frac {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    vertical-align: middle;
    line-height: 1.1;
    font-size: 0.72em;
}

.reveal .frac .num {
    border-bottom: 1.5px solid currentColor;
    padding: 0 0.18em;
}

.reveal .slides section.prox-slide.canvas-only {
    grid-template-rows: auto 1fr;
    row-gap: 0.35em;
    align-content: start;
}

.reveal .slides section.prox-slide.canvas-only .prox-stage {
    justify-self: stretch;
    align-self: stretch;
    width: 100%;
    height: 100%;
    min-width: 0;
    min-height: 0;
}

.reveal .slides section.algo-slide {
    display: grid !important;
    grid-template-rows: auto minmax(0, 1fr);
    align-content: stretch;
    justify-items: center;
    height: 100%;
    padding: var(--slide-pad-top) 1em 0.5em;
    box-sizing: border-box;
}

.reveal .slides section.algo-slide h2 {
    margin: 0 0 0.3em;
    font-size: var(--slide-title-size);
    font-weight: 600;
    letter-spacing: 0.01em;
    text-transform: none;
    text-align: center;
}

.reveal .slides section.algo-slide .algo-body {
    width: min(840px, 100%);
    height: 100%;
    min-height: 0;
}

.reveal .slides section.algo-slide .algo-code-panel {
    width: 100%;
    height: 100%;
    min-height: 0;
    border: 1px solid var(--algo-code-border);
    border-radius: 8px;
    background: var(--algo-code-bg);
    padding: 0.45em;
    box-sizing: border-box;
    box-shadow: 0 14px 36px var(--algo-code-shadow);
}

.reveal .slides section.algo-slide .algo-pre-wrap {
    --lh: 1.55em;
    position: relative;
    height: 100%;
    min-height: 0;
    font-size: 0.54em;
}

.reveal .slides section.algo-slide .algo-pre-wrap.lines-12 {
    font-size: 0.64em;
}

.reveal .slides section.algo-slide pre {
    height: 100%;
    width: 100%;
    margin: 0;
    font-size: 1em;
    line-height: var(--lh);
    box-shadow: none;
    background: transparent;
}

.reveal .slides section.algo-slide pre code {
    height: 100%;
    max-height: none;
    padding: 0.6em 0.8em;
    border-radius: 6px;
    box-sizing: border-box;
    background: var(--algo-code-bg);
    color: var(--algo-code-fg);
    letter-spacing: 0;
    overflow: hidden;
}

.reveal .slides section.algo-slide table.hljs-ln {
    border-collapse: collapse;
    border-spacing: 0;
    margin: 0;
}

.reveal .slides section.algo-slide .hljs-ln td {
    padding: 0;
    line-height: var(--lh);
}

.reveal .slides section.algo-slide .hljs-ln-numbers {
    color: var(--algo-line-num);
    opacity: 1;
    padding-right: 1em !important;
    user-select: none;
}

.reveal .slides section.algo-slide .highlight-line {
    background: var(--algo-highlight-fill);
}

.reveal .slides section.algo-slide .algo-pre-wrap:has(.algo-frame.visible) code tr {
    opacity: 1 !important;
    filter: none !important;
}

.reveal .slides section.algo-slide .algo-pre-wrap:has(.algo-frame.visible) .highlight-line {
    background: transparent;
}

.reveal .slides section.algo-slide .algo-frame {
    position: absolute;
    top: calc(0.6em + (var(--ls) - 1) * var(--lh) + 0.08em);
    height: calc(var(--ln) * var(--lh) - 0.16em);
    border: 2px solid var(--algo-highlight-stroke);
    border-radius: 8px;
    pointer-events: none;
}

.reveal .slides section.algo-slide .frame-outer {
    --ls: 3;
    --ln: 11;
    left: 0.35em;
    right: 4em;
}

.reveal .slides section.algo-slide .frame-inner {
    left: 1.6em;
    right: 8.8em;
}

.reveal .slides section.algo-slide .frame-witness {
    --ls: 5;
    --ln: 5;
}

.reveal .slides section.algo-slide .frame-cand {
    --ls: 10;
    --ln: 3;
}

.reveal .slides section.algo-slide .algo-frame-label {
    position: absolute;
    left: calc(100% + 0.4em);
    top: 50%;
    transform: translateY(-50%);
    line-height: 1;
    white-space: nowrap;
    font-family: Consolas, "Liberation Mono", Menlo, monospace;
}

.reveal .slides section.algo-slide .algo-frame-label b {
    display: block;
    color: var(--algo-runtime-accent);
    font-size: 1.35em;
    font-weight: 800;
}

.reveal .slides section.algo-slide .algo-frame-label em {
    display: block;
    margin-top: 0.28em;
    color: var(--algo-runtime-muted);
    font-size: 0.56em;
    font-style: normal;
}

.reveal .slides section.algo-slide .algo-total {
    position: absolute;
    right: 0.7em;
    bottom: 0.55em;
    text-align: right;
    line-height: 1;
    font-family: Consolas, "Liberation Mono", Menlo, monospace;
}

.reveal .slides section.algo-slide .algo-total strong {
    display: block;
    color: var(--algo-runtime-accent);
    font-size: 2em;
    font-weight: 850;
}

.reveal .slides section.algo-slide code sub {
    font-size: 0.72em;
    line-height: 0;
    vertical-align: sub;
}

.reveal .slides section.algo-slide .hljs-keyword {
    color: var(--algo-keyword);
    font-weight: 700;
}

.reveal .slides section.algo-slide .hljs-title,
.reveal .slides section.algo-slide .hljs-built_in {
    color: var(--algo-title);
}

.reveal .slides section.algo-slide .hljs-params,
.reveal .slides section.algo-slide .hljs-variable {
    color: var(--algo-param);
}

.reveal .slides section.algo-slide .hljs-property,
.reveal .slides section.algo-slide .hljs-literal {
    color: var(--algo-built);
}

.reveal .slides section.sources-slide {
    display: grid !important;
    grid-template-rows: auto minmax(0, 1fr);
    align-content: start;
    justify-items: center;
    height: 100%;
    padding: var(--slide-pad-top) 0.9em 0.55em;
    box-sizing: border-box;
}

.reveal .slides section.sources-slide h2 {
    width: min(1120px, 100%);
    margin: 0 0 0.35em;
    font-size: var(--slide-title-size);
    font-weight: 600;
    letter-spacing: 0.01em;
    text-transform: none;
    text-align: left;
}

.reveal .slides section.sources-slide .sources-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.48em;
    width: min(1120px, 100%);
    min-height: 0;
}

.reveal .slides section.sources-slide .sources-col {
    display: flex;
    flex-direction: column;
    gap: 0.2em;
    min-width: 0;
}

.reveal .slides section.sources-slide p {
    margin: 0;
    padding-left: 0.55em;
    border-left: 2px solid color-mix(in srgb, var(--c-s) 58%, transparent);
    font-size: 0.305em;
    line-height: 1.24;
    text-align: left;
}

.reveal .slides section.sources-slide b {
    color: var(--c-s);
    font-weight: 850;
}

.reveal .slides section.sources-slide i {
    font-style: italic;
}

.reveal .slides section.def-slide {
    display: grid !important;
    grid-template-rows: auto minmax(0, 1fr);
    align-content: start;
    justify-items: center;
    height: 100%;
    padding: var(--slide-pad-top) 2.8em 1em;
    box-sizing: border-box;
}

.reveal .slides section.def-slide h2 {
    margin: 0 0 0.55em;
    font-size: var(--slide-title-size);
    font-weight: 600;
    letter-spacing: 0.01em;
    text-transform: none;
    text-align: center;
}

.reveal .slides section.def-slide .def-body {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 0;
    max-width: 880px;
    width: 100%;
    align-self: center;
}

.reveal .slides section.def-slide .def-row {
    display: flex;
    align-items: center;
    gap: 2.2em;
    width: 100%;
}

.reveal .slides section.def-slide .def-col {
    flex: 1;
    min-width: 0;
}

.reveal .slides section.def-slide .def-circ-svg {
    flex-shrink: 0;
    width: 188px;
    height: 188px;
}

.reveal .slides section.def-slide .def-box {
    border-left: 3.5px solid color-mix(in srgb, var(--c-r) 82%, transparent);
    border-radius: 0 5px 5px 0;
    padding: 0.7em 1.5em 0.85em 1.35em;
    font-size: 0.53em;
    line-height: 1.9;
    text-align: left;
    background: rgba(128, 128, 128, 0.055);
    width: 100%;
    box-sizing: border-box;
}

.reveal .slides section.def-slide .zoom-text,
.reveal .slides section.def-slide .zoom-text-end {
    display: none;
}

.reveal .slides section.def-slide .def-box {
    transition: transform 0.5s ease;
}

.reveal .slides section.def-slide:has(.zoom-text.visible):not(:has(.zoom-text-end.visible)) .def-box {
    transform: scale(2.5);
    z-index: 30;
    background: var(--r-background-color);
}

.reveal .slides section.def-slide .def-box-label {
    display: block;
    font-size: 0.76em;
    font-weight: 800;
    letter-spacing: 0.13em;
    text-transform: uppercase;
    color: color-mix(in srgb, var(--c-r) 95%, transparent);
    margin-bottom: 0.45em;
    font-style: normal;
}

.reveal .slides section.def-slide .def-box p {
    margin: 0.15em 0;
}

.reveal .slides section.def-slide .def-formula {
    display: block;
    text-align: center;
    margin: 0.35em 0 !important;
    letter-spacing: 0.01em;
    font-style: italic;
}

.reveal .slides section.def-slide .k-r { color: var(--c-r); }
.reveal .slides section.def-slide .k-edge { color: var(--c-edge); }
.reveal .slides section.def-slide .k-active { color: var(--c-active); }
.reveal .slides section.def-slide .k-block { color: var(--c-block); }

.reveal .slides section.def-slide .prox-rule-box {
    border-left: 3.5px solid color-mix(in srgb, var(--c-active) 82%, transparent);
    border-radius: 0 5px 5px 0;
    padding: 0.6em 1.4em 0.65em 1.35em;
    font-size: 0.53em;
    line-height: 1.7;
    text-align: left;
    background: color-mix(in srgb, var(--c-active) 6%, transparent);
    width: 100%;
    box-sizing: border-box;
    margin-top: 0.75em;
}

.reveal .slides section.def-slide .prox-rule-label {
    display: block;
    font-size: 0.76em;
    font-weight: 800;
    letter-spacing: 0.13em;
    text-transform: uppercase;
    color: color-mix(in srgb, var(--c-active) 95%, transparent);
    margin-bottom: 0.3em;
    font-style: normal;
}

.reveal .slides section.def-slide .prox-rule-box p {
    margin: 0;
}

.reveal .slides section.toc-slide {
    display: grid !important;
    grid-template-rows: auto minmax(0, 1fr);
    align-content: start;
    justify-items: center;
    height: 100%;
    padding: var(--slide-pad-top) 0.9em 0.5em;
    box-sizing: border-box;
}

.reveal .slides section.toc-slide > h2 {
    margin: 0 0 0.6em;
    font-size: var(--slide-title-size);
    font-weight: 600;
    letter-spacing: 0.01em;
    text-transform: none;
    text-align: center;
}

.reveal .slides section.toc-slide ol.toc-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    grid-auto-rows: 1fr;
    align-content: center;
    gap: 0.6em;
    width: min(1180px, 100%);
    height: 100%;
    min-height: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

[data-group="prox"]    { --group-accent: var(--c-s); }
[data-group="witness"] { --group-accent: var(--c-active); }
[data-group="demo"]    { --group-accent: var(--c-edge); }
[data-group="spezial"] { --group-accent: var(--c-r); }

.reveal .slides section.section-slide {
    display: grid !important;
    align-content: center;
    justify-items: center;
    row-gap: 0.6em;
    height: 100%;
    text-align: center;
}

.reveal .slides section.section-slide .section-num {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 1.7em;
    height: 1.7em;
    border-radius: 50%;
    font-size: 0.85em;
    font-weight: 800;
    line-height: 1;
    color: var(--r-background-color);
    background: var(--group-accent);
}

.reveal .slides section.section-slide h1 {
    margin: 0;
    max-width: min(90vw, 1100px);
    font-size: 1.8em;
    font-weight: 700;
    line-height: 1.15;
    letter-spacing: 0.01em;
    text-transform: none;
    text-wrap: balance;
    color: var(--group-accent);
}

.reveal .slides section.toc-slide li.toc-item {
    display: flex;
    align-items: flex-start;
    gap: 0.55em;
    border: 1px solid color-mix(in srgb, var(--group-accent) 45%, transparent);
    border-left: 4px solid var(--group-accent);
    border-radius: 8px;
    background: color-mix(in srgb, var(--group-accent) 9%, transparent);
    padding: 0.6em 0.75em;
    text-align: left;
    min-width: 0;
    min-height: 0;
    overflow: hidden;
}

.reveal .slides section.toc-slide li.toc-item.fragment {
    transform: translateY(0.35em);
    transition:
        opacity 0.32s ease,
        transform 0.32s ease;
}

.reveal .slides section.toc-slide li.toc-item.fragment.visible {
    transform: translateY(0);
}

.reveal .slides section.toc-slide .toc-num {
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 1.6em;
    height: 1.6em;
    border-radius: 50%;
    font-size: 0.63em;
    font-weight: 800;
    line-height: 1;
    color: var(--r-background-color);
    background: var(--group-accent);
}

.reveal .slides section.toc-slide .toc-body {
    display: flex;
    flex-direction: column;
    gap: 0.25em;
    min-width: 0;
}

.reveal .slides section.toc-slide .toc-title {
    font-size: 0.69em;
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: 0.01em;
    color: var(--group-accent);
}

.reveal .slides section.toc-slide ul.toc-sub {
    margin: 0;
    padding-left: 1.05em;
    font-size: 0.51em;
    line-height: 1.5;
    opacity: 0.82;
}

.reveal .slides section.toc-slide ul.toc-sub li {
    margin: 0.05em 0;
}

.reveal .slides section.toc-slide ul.toc-sub li::marker {
    color: var(--group-accent);
}

.reveal .slide-number {
    top: 8px !important;
    font-size: 20px !important;
    background-color: transparent !important;
}
