/* ==========================================================================
   Reset & Base
   ========================================================================== */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("../fonts/InterDisplay-Regular.woff2") format("woff2");
}

:root {
  --padding: 1rem;
  /* = 16px */
  --color-black: #000;
  --color-white: #fff;
  --color-text: var(--color-black);
  --color-bg: var(--color-white);

  --font-family-sans: "Inter", -apple-system, BlinkMacSystemFont,
    "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-size: 1rem;

  --viewport-w: 100svw;
  --stream-w: var(--stream-w, 100svw);

  --branding-span: calc(100svw - 2 * var(--padding));

  --arrowlink-shift: 1.05em;
  --arrowlink-speed: 180ms;
  --arrowlink-delay: 60ms;
}

@media (min-width: 768px) {
  :root {
    --branding-span: clamp(160px,
        calc(100svw - var(--stream-w) - 2 * var(--padding)),
        100svw);
  }
}

html {
  font-family: var(--font-family-sans);
  font-size: var(--font-size);
  font-variant-numeric: tabular-nums;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  color: var(--color-text);
  background: var(--color-bg);
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  overflow-x: hidden;
}

body {
  margin: 0;
  overflow-x: hidden;
  animation: fadein .5s ease-in;
  isolation: auto;
}

@keyframes fadein {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

/* ==========================================================================
   Typography
   ========================================================================== */
h1,
h2,
h3,
h4,
h5,
h6 {
  font: inherit;
  line-height: inherit;
}

.text p,
.text ul,
.text ol {
  margin-bottom: 1.25rem;
  line-height: 1.25;
  max-width: 30rem;
}

.text ul,
.text ol {
  margin-left: 1rem;
}

.text ul p,
.text ol p {
  margin-bottom: 0;
}

.text ul>li {
  list-style: square;
}

.text ol>li {
  list-style: decimal;
}

/* ==========================================================================
   Links (Basis)
   ========================================================================== */
a {
  color: var(--color-text);
  text-decoration: none;
  position: relative;
}

/* ==========================================================================
   Header & Branding (28–35–50)
   ========================================================================== */
body>header {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: auto;
  display: flex;
  align-items: center;
  width: 100%;
  padding-inline: var(--padding);
  background: transparent;
  z-index: 50;
  pointer-events: none;

  transform: none !important;
  isolation: auto !important;
  filter: none !important;
  opacity: 1 !important;
}

body>header h1 {
  margin: 0;
  width: 100%;
}

body>header a {
  pointer-events: auto;
  text-decoration: none;
  color: inherit;
}

body>header .columns {
  position: relative;
  width: 100%;
  max-width: var(--branding-span);
  height: 1em;
  line-height: 1;
  background: transparent;
}

body>header .columns>div {
  position: absolute;
  top: 0;
  white-space: nowrap;
  font-weight: 500;
}

/* 28/35/50 exakt */
body>header .columns .one {
  left: 0;
  transform: none;
}

body>header .columns .two {
  left: calc(100% * (28 / 113));
  transform: translateX(-50%);
}

body>header .columns .three {
  left: calc(100% * (63 / 113));
  transform: none;
}

/* ==========================================================================
   Top-left link (Index-Drawer)
   ========================================================================== */
body>header .toplink {
  position: absolute;
  top: calc(env(safe-area-inset-top, 0px) + var(--padding));
  left: calc(env(safe-area-inset-left, 0px) + var(--padding));
  margin: 0;
  padding: 0;
  pointer-events: none;
  transform: translateZ(0);
  z-index: 60;
  background: transparent;

  isolation: auto !important;
  filter: none !important;
  opacity: 1 !important;
}

body>header .toplink a {
  pointer-events: auto;
  text-decoration: none;
  color: inherit;
}

/* ==========================================================================
   Footer (schlank)
   ========================================================================== */
footer {
  position: fixed;
  bottom: var(--padding);
  left: var(--padding);
  right: var(--padding);
  background: transparent;
  z-index: 40;
  pointer-events: none;

  transform: none !important;
  isolation: auto !important;
  filter: none !important;
  opacity: 1 !important;
}

footer ul {
  list-style: none;
}

footer li {
  margin-bottom: calc(var(--padding)/6);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

footer a {
  pointer-events: auto;
  text-decoration: none;
  color: inherit;
}

/* ==========================================================================
   Arrow-Links (Hover-Effekt)
   ========================================================================== */
.arrowlink {
  position: relative;
  display: inline-block;
  padding-left: 0;
  text-decoration: none;
  transition: padding-left var(--arrowlink-speed) ease-out;
}

.arrowlink::before {
  content: "→";
  position: absolute;
  left: 0;
  top: 0;
  line-height: 1;
  opacity: 0;
  transition: opacity var(--arrowlink-speed) ease-out var(--arrowlink-delay);
}

.arrowlink:hover,
.arrowlink:focus-visible {
  padding-left: var(--arrowlink-shift);
}

.arrowlink:hover::before,
.arrowlink:focus-visible::before {
  opacity: 1;
}

.arrowlink:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 2px;
}

/* Linker Pfeil (Stream) */
.arrowlink.left::before {
  content: "←";
}

/* Mobile: Pfeile immer sichtbar */
@media (hover: none) {
  .arrowlink {
    padding-left: var(--arrowlink-shift);
  }

  .arrowlink::before {
    opacity: 1;
    transition: none;
  }
}

/* --- Index-Button: Pfeil ↔ X via aria-expanded --- */
[data-index-toggle]::before {
  content: "→";
}

[data-index-toggle][aria-expanded="true"]::before {
  content: "×";
}

/* --- Info-Button: Pfeil ↔ X via aria-expanded --- */
[data-info-toggle]::before {
  content: "→";
}

[data-info-toggle][aria-expanded="true"]::before {
  content: "×";
}

/* ==========================================================================
   Blend-Logik
   ========================================================================== */

/* Sicherheit */
.stream,
.stream__rail,
#index-panel,
.indexpanel,
.indexpanel__scroller,
#index-overlay {
  isolation: auto !important;
}

/* Mobile: immer Difference auf Header/Toplink/Footer */
@media (max-width: 767.98px) {

  body>header,
  body>header .toplink,
  footer {
    mix-blend-mode: difference !important;
    color: #fff !important;
  }
}

/* Desktop:
   Drawer zu → normal,
   Drawer offen → Difference (html.drawer-open Flag)
*/
@media (min-width: 768px) {

  body>header,
  body>header .toplink,
  footer {
    mix-blend-mode: normal !important;
    color: #000 !important;
  }

  html.drawer-open body>header,
  html.drawer-open body>header .toplink,
  html.drawer-open footer {
    mix-blend-mode: difference !important;
    color: #fff !important;
  }
}

/* Fallback ohne mix-blend-mode */
@supports not (mix-blend-mode: difference) {

  body>header,
  body>header .toplink,
  footer {
    mix-blend-mode: normal !important;
    color: #000 !important;
  }
}

/* ==========================================================================
   Utilities
   ========================================================================== */
ul {
  list-style: none;
}

img {
  max-width: 100%;
  height: auto;
}

/* Optional: sticky Artikel-Titel */
.article-title {
  position: sticky;
  top: calc(var(--padding)*1.75);
  margin-top: calc(var(--padding)*1.25);
  z-index: 30;
}

/* Sicherheit Header/Toplink/Footer */
body>header,
body>header .toplink,
footer {
  background: transparent !important;
  isolation: auto !important;
  transform: none !important;
  filter: none !important;
  opacity: 1 !important;
}

/* ==========================================================================
   Stream-Spinner (Random-Initialisierung)
   ========================================================================== */

.stream-spinner {
  position: fixed;
  top: 50%;
  transform: translateY(-50%);
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 1px solid currentColor;
  border-top-color: transparent;
  opacity: 0;
  pointer-events: none;
  z-index: 55;
  animation: streamspin .7s linear infinite;
  transition: opacity 160ms ease-out;
}

/* Mobile: rechts am Viewportrand */
@media (max-width: 767.98px) {
  .stream-spinner {
    right: var(--padding);
  }
}

/* Desktop: rechts an der Kante des linken Bereichs (vor dem Stream) */
@media (min-width: 768px) {
  .stream-spinner {
    right: calc(var(--stream-w) + var(--padding));
  }
}

/* Sichtbar, wenn JS .is-visible setzt */
.stream-spinner.is-visible {
  opacity: 0.8;
}

@keyframes streamspin {
  to {
    transform: translateY(-50%) rotate(360deg);
  }
}