/* ==========================================================
   RE9 VR - gemeinsame Stile für alle Seiten
   ========================================================== */

/* Big Shoulders Display, selbst gehostet (SIL Open Font License,
   Lizenztext liegt als OFL-BigShoulders.txt daneben).
   Nur fuer Ueberschriften und Menue - Fliesstext bleibt Systemschrift. */
@font-face{
  font-family: "Big Shoulders";
  src: url("big-shoulders-semibold.ttf") format("truetype");
  font-weight: 600;
  font-display: swap;
}
@font-face{
  font-family: "Big Shoulders";
  src: url("big-shoulders-extrabold.ttf") format("truetype");
  font-weight: 800;
  font-display: swap;
}

/* Titelschrift - nur fuer die grossen Seitentitel (INFO, FEATURES, ...) */
@font-face{
  font-family: "RE9 Title";
  src: url("re9-title.ttf") format("truetype");
  font-weight: 400;
  font-display: swap;
}

:root{
  --display: "Big Shoulders", "Trebuchet MS", "Segoe UI", sans-serif;
  --title:   "RE9 Title", "Big Shoulders", "Trebuchet MS", sans-serif;
}

:root{
  --ink:   #05060a;
  --bone:  #e4e9f0;
  --blood: #1c46b8;
  --ember: #3f9be0;

  /* Breite des Trailers. Der dritte Wert begrenzt die Höhe. */
  --player-w: min(30vw, 460px, 46vh);
}

*{ box-sizing: border-box; margin: 0; padding: 0; }

html{ background: var(--ink); scroll-behavior: smooth; }

body{
  color: var(--bone);
  font-family: "Trebuchet MS", "Segoe UI", system-ui, sans-serif;
  background: var(--ink);
  overflow-x: hidden;
}

/* ---------- Ebene 0: Artwork ---------- */
.bg{
  position: fixed;
  inset: 0;
  z-index: 0;
  /* oben buendig, unten wird beschnitten */
  background: url("re9vr-bg.jpg") center top / cover no-repeat;
  transform-origin: 52% 0%;
  animation: kenburns 46s ease-in-out infinite alternate;
  will-change: transform;
}
@keyframes kenburns{
  from{ transform: scale(1.02); }
  to  { transform: scale(1.10); }
}
/* Grosse oder hochaufloesende Schirme bekommen das 3344er Master-Artwork
   (1,5 MB). Kleine Fenster bleiben beim 1920er Bild. */
@media (min-width: 1400px), (min-resolution: 1.5dppx){
  .bg{ background-image: url("re9vr-bg-2x.jpg"); }
}

/* ---------- Ebene 2: Verlauf ---------- */
body::before{
  content: "";
  position: fixed;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background:
    linear-gradient(to top,    rgba(5,6,10,.88) 0%, rgba(5,6,10,.5) 22%, rgba(5,6,10,0) 45%),
    linear-gradient(to bottom, rgba(5,6,10,.6)  0%, rgba(5,6,10,0)  35%);
}
/* Unterseiten: eigenes, ruhigeres Motiv - gerade noch erkennbar,
   damit es den Text nicht stoert. Deckkraft ueber .page::before regeln. */
.page .bg{
  background-image: url("page-bg.jpg");
  background-position: center top;
  animation-duration: 90s;
}
.page::before{
  background: rgba(5,6,10,.72);
}

/* ---------- Ebene 3: Filmkorn ---------- */
.grain{
  position: fixed;
  top: -50%; left: -50%;
  width: 200%; height: 200%;
  z-index: 3;
  pointer-events: none;
  opacity: .07;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/></filter><rect width='200' height='200' filter='url(%23n)'/></svg>");
  animation: grain .9s steps(5) infinite;
  will-change: transform;
}
@keyframes grain{
  0%{transform:translate(0,0)} 20%{transform:translate(-3%,2%)}
  40%{transform:translate(2%,-3%)} 60%{transform:translate(-2%,-2%)}
  80%{transform:translate(3%,1%)} 100%{transform:translate(0,0)}
}

/* ---------- Effekte im Startbild ----------
   Blut, Licht und Wasserhahn aus bgfx.js. Das Canvas haengt IN der .bg,
   zoomt also mit dem Ken-Burns-Effekt mit und bleibt auf dem Bild kleben. */
.bgfx{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

/* ---------- Navigation ---------- */
.nav{
  position: sticky;
  top: 0;
  z-index: 6;
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: clamp(1rem, 3vw, 3.2rem);
  padding: clamp(1rem, 2vh, 1.6rem) 5vw;
  background: linear-gradient(rgba(5,6,10,.9), rgba(5,6,10,0));
  backdrop-filter: blur(3px);
}
.nav a{
  font-family: var(--display);
  font-weight: 600;
  font-size: clamp(.9rem, 1.5vw, 1.25rem);
  letter-spacing: .2em;
  text-transform: uppercase;
  text-decoration: none;
  color: rgba(228,233,240,.68);
  padding: .3em 0;
  border-bottom: 1px solid transparent;
  transition: color .2s ease, border-color .2s ease;
}
.nav a:hover, .nav a:focus-visible{ color: #fff; border-color: var(--blood); }

/* Haus-Symbol statt "Home" - spart Platz auf schmalen Displays */
.nav-home{ display: inline-flex; align-items: center; }
.nav-home svg{ display: block; width: 1.15rem; height: 1.15rem; }

@media (max-width: 520px){
  .nav{ gap: 1.05rem; padding: .9rem 4vw; }
  .nav a{ font-size: .7rem; letter-spacing: .13em; }
  .nav-home svg{ width: 1.05rem; height: 1.05rem; }
}
.nav a.is-current{ color: #fff; border-color: var(--blood); }

/* ---------- Startseite ---------- */
.hero{
  min-height: calc(100svh - 3.6rem);
  display: grid;
  align-content: start;
  justify-items: center;
  row-gap: clamp(.9rem, 2.2vh, 1.8rem);
  padding: 0 5vw 3vh;
}

.player{
  position: relative;
  z-index: 5;
  width: var(--player-w);
  padding: clamp(5px, .55vmin, 9px);          /* Passepartout um das Video */
  background: rgba(5,6,10,.6);
  border: 1px solid rgba(228,233,240,.26);
  border-radius: 12px;
  backdrop-filter: blur(3px);
  box-shadow:
    0 26px 70px -26px rgba(0,0,0,.95),        /* Tiefe, hebt es vom Bild ab */
    0 0 70px -28px rgba(63,155,224,.55);      /* leichter Feuerschein */
}

.player-inner{
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  border-radius: 7px;
  overflow: hidden;
  box-shadow: inset 0 0 0 1px rgba(228,233,240,.16);
}
.player-inner iframe{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

.stack{
  position: relative;
  z-index: 5;
  display: grid;
  justify-items: center;
  gap: .45rem;
  text-align: center;
}

.download{
  display: block;
  position: relative;
  padding: clamp(.28rem, .7vmin, .45rem) clamp(.4rem, 1vmin, .65rem);
  background: rgba(5,6,10,.55);
  border: 1px solid rgba(63,155,224,.75);
  /* Verlauf wie die Striche neben "Version 2.1": aussen ausgefadet */
  border-image: linear-gradient(90deg,
      rgba(63,155,224,.2), rgba(63,155,224,.9) 50%, rgba(63,155,224,.2)) 1;
  backdrop-filter: blur(2px);
  box-shadow: 0 0 45px -14px rgba(63,155,224,.6);
  transition: background .2s ease, border-color .2s ease,
              box-shadow .2s ease, transform .2s ease;
}
.download img{
  display: block;
  width: min(20vw, 235px);
  height: auto;
  filter: drop-shadow(0 0 6px rgba(28,70,184,.45));
  transition: filter .2s ease;
}
.download:hover, .download:focus-visible{
  background: rgba(28,70,184,.14);
  border-color: var(--blood);
  border-image: linear-gradient(90deg,
      rgba(28,70,184,.3), var(--blood) 50%, rgba(28,70,184,.3)) 1;
  box-shadow: 0 0 60px -10px rgba(63,155,224,.85);
  transform: translateY(-2px);
}
.download:hover img, .download:focus-visible img{
  filter: brightness(1.45) drop-shadow(0 0 14px rgba(28,70,184,.8));
}
.download:active{ transform: translateY(0); }

/* Versionsangabe: rechts NEBEN dem Download-Button. Absolut gesetzt, damit
   der Button selbst mittig stehen bleibt und nicht nach links rutscht. */
.dl-wrap{ position: relative; display: inline-block; }
.ver{
  position: absolute;
  left: 100%;
  top: 50%;
  transform: translateY(-50%);
  margin-left: clamp(.5rem, 1.2vmin, .9rem);
  text-align: left;
  line-height: 1.1;
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(.8rem, 1.5vmin, 1.05rem);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
  white-space: nowrap;
  pointer-events: none;
}
.dl-wrap:has(.download.is-soon) .ver{ display: none; }

/* Noch nicht freigegeben */
.download.is-soon{
  cursor: default;
  border-image: none;
  border-color: rgba(228,233,240,.28);
  box-shadow: none;
  background: rgba(5,6,10,.45);
}
.download.is-soon img{ filter: brightness(.62); }
.download.is-soon:hover{
  transform: none;
  background: rgba(5,6,10,.45);
  border-image: none;
  border-color: rgba(228,233,240,.28);
  box-shadow: none;
}
.download.is-soon:hover img{ filter: brightness(.62); }

/* "Coming Soon" liegt auf dem Button. Sobald in download.js eine Adresse
   steht, faellt die Klasse is-soon weg und der Text verschwindet mit ihr. */
.soon{
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(1rem, 2.6vw, 1.7rem);
  letter-spacing: .26em;
  text-indent: .26em;
  text-transform: uppercase;
  color: #fff;
  text-shadow:
    0 2px 5px rgba(0,0,0,.95),
    0 0 20px rgba(0,0,0,.85),
    0 0 40px rgba(0,0,0,.7);
  pointer-events: none;
}
.download:not(.is-soon) .soon{ display: none; }

/* Countdown auf der Startseite */
.countdown{
  display: flex;
  gap: clamp(.9rem, 2.4vw, 1.9rem);
  margin-top: .3rem;
}
.countdown > div{
  display: grid;
  justify-items: center;
  gap: .1rem;
}
.countdown b{
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(1.5rem, 3.6vw, 2.4rem);
  line-height: 1;
  min-width: 2ch;
  text-align: center;
  color: #fff;
  text-shadow: 0 2px 8px rgba(0,0,0,.9), 0 0 22px rgba(0,0,0,.7);
}
.countdown span{
  font-family: var(--display);
  font-weight: 600;
  font-size: .58rem;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
}
.cd-date{
  font-family: var(--display);
  font-weight: 600;
  font-size: .66rem;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: rgba(63,155,224,.85);
}

/* ==========================================================
   Release-Ankuendigung (TEMPORAER bis 2.1 draussen ist)
   Gehoert zum Block .release in der index.html -- beides zusammen loeschen.
   ========================================================== */
.release{
  display: grid;
  justify-items: center;
  gap: .2rem;
  margin-top: clamp(.35rem, 1.2vmin, .9rem);
}
.release-kicker{
  display: flex;
  align-items: center;
  gap: clamp(.5rem, 1.6vmin, .9rem);
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(.58rem, 1.25vmin, .78rem);
  letter-spacing: .34em;
  text-indent: .34em;
  text-transform: uppercase;
  color: rgba(228,233,240,.58);
}
.release-kicker::before,
.release-kicker::after{
  content: "";
  width: clamp(1.1rem, 4vmin, 2.8rem);
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(63,155,224,.75));
}
.release-kicker::after{ transform: scaleX(-1); }

.release-date{
  font-family: var(--title);
  font-size: clamp(1.45rem, 4.2vmin, 3rem);
  line-height: 1;
  letter-spacing: .05em;
  background: linear-gradient(180deg,
              #dde9f7 0%, #3f9be0 56%, #1c46b8 100%);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  animation: releaseGlow 3.8s ease-in-out infinite;
}
.release-date i{
  font-style: normal;
  opacity: .45;
  padding: 0 .12em;
}
@keyframes releaseGlow{
  0%, 100%{ filter: drop-shadow(0 0 14px rgba(28,70,184,.38)); }
  50%     { filter: drop-shadow(0 0 26px rgba(63,155,224,.55)); }
}
@media (prefers-reduced-motion: reduce){
  .release-date{ animation: none; filter: drop-shadow(0 0 16px rgba(28,70,184,.4)); }
}

/* ==========================================================
   Achievement-Tafel: gerade und mittig im Stack, direkt ueber
   "Made by Talemann", mit eigenem Abstand nach unten.
   ========================================================== */
.ach{
  --ach-rot: 0deg;
  width: min(270px, 60vw, 23vh);
  margin: 0 auto clamp(.8rem, 2.5vh, 1.6rem);
  display: grid;
  justify-items: center;
  gap: .25rem;
  text-align: center;
  pointer-events: none;
}

.ach-kicker{
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(.58rem, 1.35vmin, .82rem);
  line-height: 1;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: #fff;
  text-shadow: 0 2px 6px rgba(0,0,0,.95), 0 0 16px rgba(255,210,74,.7);
}

.ach-frame{
  position: relative;
  width: 100%;
  margin: 0;
  padding: clamp(3px, .4vmin, 6px);
  background: rgba(5,6,10,.72);
  border: 1px solid rgba(255,210,74,.45);
  border-radius: 9px;
  box-shadow:
    0 16px 40px -20px rgba(0,0,0,.95),
    0 0 22px -8px rgba(255,210,74,.35);
}

/* Blitz-Glow am Rahmen: zwei Lagen mit unterschiedlich langen Takten
   (4,3 s und 6,9 s). Weil sich die Takte nicht deckeln, kommen die Schlaege
   ungleichmaessig -- wie das Wetterleuchten hinter der Seite. */
.ach-frame::before,
.ach-frame::after{
  content: "";
  position: absolute;
  inset: 0;
  border: 1px solid rgba(255,248,205,.95);
  border-radius: 9px;
  box-shadow:
    0 0 48px 0 rgba(255,214,90,.95),
    0 0 100px -8px rgba(255,196,64,.55);
  opacity: 0;
  pointer-events: none;
}
@media (prefers-reduced-motion: no-preference){
  .ach-frame::before{ animation: achBolt1 4.3s linear infinite; }
  .ach-frame::after { animation: achBolt2 6.9s linear -2.1s infinite; }

  /* kurzer Doppelschlag */
  @keyframes achBolt1{
    0%,  100%{ opacity: 0; }
    1%      { opacity: 1; }
    3%      { opacity: .12; }
    4.5%    { opacity: .85; }
    8%      { opacity: 0; }
    46%     { opacity: 0; }
    47%     { opacity: .7; }
    50%     { opacity: 0; }
  }
  /* einzelner, etwas traegerer Schlag */
  @keyframes achBolt2{
    0%,  100%{ opacity: 0; }
    2%      { opacity: .9; }
    6%      { opacity: .2; }
    7%      { opacity: .65; }
    12%     { opacity: 0; }
    63%     { opacity: 0; }
    64.5%   { opacity: 1; }
    68%     { opacity: .1; }
    72%     { opacity: 0; }
  }
}

.ach-frame img{
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: 5px;
  box-shadow: inset 0 0 0 1px rgba(228,233,240,.16);
}

.ach-name{
  margin: 0;
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(.6rem, 1.45vmin, .9rem);
  line-height: 1.1;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgba(221,233,247,.95);
  text-shadow: 0 2px 6px rgba(0,0,0,.95);
}

.credit{
  font-family: var(--display);
  font-weight: 600;
  font-size: .72rem;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: rgba(228,233,240,.6);
}

.note{
  font-size: .62rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: rgba(228,233,240,.5);
}

:focus-visible{ outline: 2px solid var(--bone); outline-offset: 5px; }

/* ---------- Unterseiten ---------- */
.section{
  position: relative;
  z-index: 5;
  max-width: 58rem;
  margin: 0 auto;
  padding: clamp(1.5rem, 4vh, 3rem) 5vw clamp(2rem, 5vh, 4rem);
}
.panel{
  padding: clamp(1.6rem, 4.5vw, 3.2rem);
  background: rgba(5,6,10,.86);
  border: 1px solid rgba(228,233,240,.15);
  border-radius: 10px;
  backdrop-filter: blur(6px);
}
.panel h1.title{ text-align: center; }
.panel h1 .word{ position: relative; display: inline-block; }
.panel h1 .ver{
  font-family: var(--display);
  position: absolute;           /* haengt daneben, ohne die Mitte zu verschieben */
  left: calc(100% + .55em);
  bottom: .3em;
  font-size: .3em;
  font-weight: 700;
  letter-spacing: .22em;
  white-space: nowrap;
  color: var(--ember);
}
.lead.centered{ text-align: center; }

@media (max-width: 620px){
  .panel h1 .ver{
    position: static;
    display: block;
    margin-top: .6rem;
    font-size: .34em;
  }
}

.panel h1{
  margin-bottom: .5rem;
  font-family: var(--title);
  font-size: clamp(2.4rem, 7.5vw, 4.2rem);
  font-weight: 400;
  line-height: 1.05;
  letter-spacing: .06em;
  text-transform: uppercase;
}
/* Erster Buchstabe im Logo-Rot.
   Die zweite Zeile ist fuer Titel, die wegen des Versionshinweises
   in einem <span class="word"> stecken - dort greift die erste nicht. */
.panel h1::first-letter{ color: var(--blood); }
.panel h1 .word::first-letter{ color: var(--blood); }

/* Die Titelbox nur so breit wie die Schrift selbst, damit die Aeste an den
   Buchstaben kleben. Zentriert bleibt sie ueber die Raender. */
.panel h1{ width: fit-content; max-width: 100%; position: relative; }
.panel h1.title{ margin-left: auto; margin-right: auto; }

/* Aeste, die durch die Ueberschrift kriechen. Das SVG setzt branches.js
   in jede h1; hier steht nur, wie es liegt und wie die Pfade wachsen. */
/* multiply sorgt dafuer, dass die schwarzen Aeste nur auf den hellen
   Buchstaben zu sehen sind - auf dem dunklen Panel verschwinden sie. */
.h1-branches{
  position: absolute;
  inset: 0;
  z-index: 2;
  overflow: hidden;      /* nichts ragt ueber die Titelzeile hinaus */
  pointer-events: none;
  mix-blend-mode: multiply;
}
.h1-branches path{
  fill: none;
  stroke: #000;
  stroke-linecap: round;
  stroke-linejoin: round;
}
@media (prefers-reduced-motion: no-preference){
  /* Der Ast waechst einmal herein und bleibt dann stehen. */
  .h1-branches path{
    stroke-dasharray: var(--len);
    stroke-dashoffset: var(--len);
    animation: branchGrow var(--dur, 2.6s) ease-out var(--delay, 0s) forwards;
  }
  @keyframes branchGrow{ to{ stroke-dashoffset: 0; } }
}

.panel h1 + .lead.nolinie{ border-bottom: 0; padding-bottom: 0; margin-bottom: 1.2rem; }

.panel h1 + .lead{
  margin-bottom: 2.4rem;
  padding-bottom: 1.4rem;
  border-bottom: 1px solid rgba(28,70,184,.6);
  font-size: 1.02rem;
  color: rgba(228,233,240,.72);
}
.panel h2{
  margin: 2.8rem 0 1.1rem;
  font-family: var(--display);
  font-size: clamp(1.25rem, 3.1vw, 1.65rem);
  font-weight: 800;
  letter-spacing: .1em;
  color: #fff;
}
.panel h1 + h2, .panel .lead + h2{ margin-top: 0; }
.panel ul + h2, .panel ol + h2{ margin-top: 3.4rem; }
.panel ul, .panel ol{ margin-bottom: 2rem; }
.panel h2 .num{
  display: block;
  margin-bottom: .35rem;
  font-size: .72rem;
  letter-spacing: .3em;
  text-transform: uppercase;
  color: var(--blood);
}
.panel h3{
  margin: 1.8rem 0 .6rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: .95rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ember);
}
.panel p, .panel li{
  font-size: .97rem;
  line-height: 1.8;
  color: rgba(228,233,240,.84);
}
.panel p + p{ margin-top: 1rem; }
.panel ul, .panel ol{ margin: .8rem 0 0 1.3rem; }
.panel li{ margin-bottom: .55rem; }
.panel li::marker{ color: var(--blood); }
.panel a{ color: var(--ember); }
.panel strong{ color: #fff; }
.panel code{
  font-family: Consolas, "Courier New", monospace;
  font-size: .88em;
  padding: .1em .4em;
  background: rgba(228,233,240,.08);
  border-radius: 3px;
}
.panel .closing{
  margin-top: 1.6rem;
  padding-top: 1.4rem;
  border-top: 1px solid rgba(228,233,240,.12);
  font-style: italic;
  color: rgba(228,233,240,.66);
}

/* Download-Link auf Unterseiten */
.dl-link{
  display: inline-block;
  margin: .9rem 0 .2rem;
  padding: .8em 1.8em;
  font-size: .82rem;
  font-weight: 700;
  letter-spacing: .2em;
  text-transform: uppercase;
  text-decoration: none;
  color: var(--bone);
  background: rgba(28,70,184,.16);
  border: 1px solid var(--blood);
  border-radius: 6px;
  transition: background .2s ease, color .2s ease;
}
.dl-link:hover, .dl-link:focus-visible{ background: var(--blood); color: #fff; }
.dl-link.is-soon{
  cursor: default;
  color: rgba(228,233,240,.45);
  background: rgba(228,233,240,.05);
  border-color: rgba(228,233,240,.22);
}
.dl-link.is-soon:hover{
  background: rgba(228,233,240,.05);
  color: rgba(228,233,240,.45);
}

/* Installationsschritte */
.steps{ margin: 1.4rem 0 0 1.3rem; }
.steps > li{ margin-bottom: 1.6rem; }
.steps > li > strong{
  display: block;
  margin-bottom: .3rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.1rem;
  letter-spacing: .04em;
  color: #fff;
}
.steps ul{ margin-top: .6rem; }

/* Bindings-Bild */
.chart{ margin: 0 0 2.4rem; }
.chart a{ display: block; }
.chart img{
  display: block;
  width: 100%;
  height: auto;
  border: 1px solid rgba(228,233,240,.15);
  border-radius: 8px;
}
.chart figcaption{
  margin-top: .7rem;
  font-size: .75rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(228,233,240,.45);
  text-align: center;
}

/* Zusaetzlicher Abstand zwischen zwei Absaetzen */
.panel .spacer{ height: 1.4rem; }

/* Schlusssatz ohne Trennlinie darueber */
.panel .closing.plain{ border-top: 0; padding-top: 0; }

/* Sprungleiste unter der Seitenueberschrift */
.jump{
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: clamp(.8rem, 2.5vw, 2rem);
  margin: 0 0 1.6rem;
}
.jump a{
  font-family: var(--display);
  font-weight: 600;
  font-size: .82rem;
  letter-spacing: .18em;
  text-transform: uppercase;
  text-decoration: none;
  color: rgba(228,233,240,.62);
  padding-bottom: .25em;
  border-bottom: 1px solid transparent;
  transition: color .2s ease, border-color .2s ease;
}
.jump a:hover, .jump a:focus-visible{ color: #fff; border-color: var(--blood); }

/* Bereichstitel: Sprungziel nicht unter die Navigation schieben */
.section-title[id]{ scroll-margin-top: 5rem; }
.panel h2[id]{ scroll-margin-top: 5rem; }

/* mittige Zeile unter einem Bereichstitel */
.panel p.centered{ text-align: center; color: rgba(228,233,240,.7); }
.panel p.subhead{
  margin-top: 2.6rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.25rem;
  letter-spacing: .1em;
  color: #fff;
}

/* Trennlinie zwischen zwei Bereichen einer Seite */
.rule{
  height: 0;
  margin: 2.6rem 0 2.4rem;
  border: 0;
  border-top: 1px solid rgba(28,70,184,.6);
}

/* Hervorgehobener Einschub - rote Kante wie die Trennlinien, kein Fettdruck */
.panel p.warn{
  margin: 1.6rem 0;
  padding: .9rem 1.1rem;
  border-left: 2px solid var(--blood);
  background: rgba(28,70,184,.07);
}
.panel p.warn .warn-strong{
  color: var(--blood);
  text-transform: uppercase;
  letter-spacing: .08em;
}

/* Bereichstitel in der Titelschrift, mittig wie die Seitenueberschrift */
.panel h2.section-title{
  margin: 0 0 1.6rem;
  font-family: var(--title);
  font-size: clamp(2rem, 6vw, 3.4rem);
  font-weight: 400;
  line-height: 1.05;
  letter-spacing: .06em;
  text-transform: uppercase;
  text-align: center;
  color: var(--bone);
}
.panel .r{ color: var(--blood); }

/* FAQ - aufklappbare Fragen */
.faq{ margin-top: 1.6rem; }
.faq details{
  border-bottom: 1px solid rgba(228,233,240,.12);
}
.faq summary{
  position: relative;
  list-style: none;
  cursor: pointer;
  padding: 1rem 2.2rem 1rem 0;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.08rem;
  letter-spacing: .04em;
  color: rgba(228,233,240,.9);
  transition: color .2s ease;
}
.faq summary::-webkit-details-marker{ display: none; }
.faq summary:hover, .faq details[open] summary{ color: #fff; }

/* Plus, das sich beim Oeffnen zum Minus dreht */
.faq summary::after{
  content: "";
  position: absolute;
  right: .3rem;
  top: 50%;
  width: 13px;
  height: 13px;
  background:
    linear-gradient(var(--blood), var(--blood)) center/13px 2px no-repeat,
    linear-gradient(var(--blood), var(--blood)) center/2px 13px no-repeat;
  transform: translateY(-50%);
  transition: transform .25s ease;
}
.faq details[open] summary::after{
  background: linear-gradient(var(--blood), var(--blood)) center/13px 2px no-repeat;
  transform: translateY(-50%) rotate(180deg);
}
.faq .answer{
  padding: 0 0 1.3rem;
  font-size: .95rem;
  line-height: 1.8;
  color: rgba(228,233,240,.8);
}
.faq .answer p + p{ margin-top: .8rem; }

@media (prefers-reduced-motion: reduce){
  .faq summary::after{ transition: none; }
}

/* Credits */
.credits{ list-style: none; margin: 1.6rem 0 0; padding: 0; }
.credits li{
  display: grid;
  grid-template-columns: 56px 1fr;
  align-items: center;
  gap: 1.1rem;
  padding: .9rem 0;
  border-bottom: 1px solid rgba(228,233,240,.1);
}

/* Schluss der Credits: Flat2VR-Satz im selben Abstand wie die Eintraege,
   darunter Trennstrich und rechts unten der Link zum Repo. */
.credits li:last-child{ border-bottom: 0; }
.panel .closing.credits-end{ margin-top: .9rem; text-align: center; }
.panel .repo-link{
  margin-top: 1.4rem;
  padding-top: 1rem;
  border-top: 1px solid rgba(228,233,240,.12);
  text-align: center;
  font-size: .9rem;
  font-style: italic;
}

/* Rundes Bild links. Ohne Bild erscheint stattdessen der Anfangsbuchstabe. */
.credits .avatar{
  width: 56px;
  height: 56px;
  border-radius: 50%;
  object-fit: cover;
  border: 2px solid rgba(28,70,184,.85);

  display: grid;
  place-items: center;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.5rem;
  color: rgba(228,233,240,.5);
}
.credits span.avatar{ background: rgba(228,233,240,.05); }

/* Repo noch nicht oeffentlich: Text ausgegraut statt Link */
.repo-link .repo-soon{ color: rgba(228,233,240,.35); }

/* Dickerer Rand nur bei ErwinGunsmith */
.credits .avatar.avatar-thick{ border-width: 3px; }

@media (max-width: 480px){
  .credits li{ grid-template-columns: 44px 1fr; gap: .9rem; }
  .credits .avatar{ width: 44px; height: 44px; font-size: 1.2rem; }
}
.credits b{
  display: block;
  margin-bottom: .15rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.15rem;
  letter-spacing: .06em;
  color: #fff;
}
.credits span{
  font-size: .95rem;
  line-height: 1.7;
  color: rgba(228,233,240,.78);
}

/* Optionsliste: Name fett, Erklaerung dahinter */
.options{ margin-top: 1.2rem; }
.options > div{
  padding: .85rem 0;
  border-bottom: 1px solid rgba(228,233,240,.1);
}
.options b{
  display: block;
  margin-bottom: .2rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.02rem;
  letter-spacing: .05em;
  color: #fff;
}
.options span{
  font-size: .95rem;
  line-height: 1.7;
  color: rgba(228,233,240,.8);
}

/* Aufklappliste innerhalb einer Option, z.B. "Disable Toxic Gamesettings" */
.options details{ margin-top: .55rem; }
.options summary{
  position: relative;
  list-style: none;
  cursor: pointer;
  display: inline-block;
  padding-right: 1.5rem;
  font-size: .78rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
  transition: color .2s ease;
}
.options summary::-webkit-details-marker{ display: none; }
.options summary:hover, .options details[open] summary{ color: #fff; }
.options summary::after{
  content: "";
  position: absolute;
  right: .2rem;
  top: 50%;
  width: 11px;
  height: 11px;
  background:
    linear-gradient(var(--blood), var(--blood)) center/11px 2px no-repeat,
    linear-gradient(var(--blood), var(--blood)) center/2px 11px no-repeat;
  transform: translateY(-50%);
  transition: transform .25s ease;
}
.options details[open] summary::after{
  background: linear-gradient(var(--blood), var(--blood)) center/11px 2px no-repeat;
  transform: translateY(-50%) rotate(180deg);
}
.options .toxic{
  margin: .6rem 0 .2rem;
  padding: 0;
  list-style: none;
  font-size: .92rem;
  line-height: 1.7;
  color: rgba(228,233,240,.8);
}
.options .toxic li{ position: relative; padding-left: .95rem; }
.options .toxic li::before{ content: "\2013"; position: absolute; left: 0; color: var(--blood); }
.options .toxic li.grp{
  margin-top: .6rem;
  padding-left: 0;
  font-family: var(--display);
  font-weight: 800;
  font-size: .8rem;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
}
.options .toxic li.grp:first-child{ margin-top: .2rem; }
.options .toxic li.grp::before{ content: none; }

@media (prefers-reduced-motion: reduce){
  .options summary::after{ transition: none; }
}

/* Hochkantes Bild, z.B. das Optionsmenue */
.shot-tall{ margin: 1.4rem 0 2rem; }
.shot-tall img{
  display: block;
  width: 100%;
  max-width: 420px;
  height: auto;
  margin: 0 auto;
  border: 1px solid rgba(228,233,240,.18);
  border-radius: 8px;
}
.shot-tall figcaption{
  margin-top: .7rem;
  font-size: .75rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(228,233,240,.45);
  text-align: center;
}

/* Galerie */
.gallery{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1rem;
  margin-top: 1.4rem;
}
.gallery a{ display: block; }
.gallery img{
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border: 1px solid rgba(228,233,240,.15);
  border-radius: 8px;
  transition: border-color .2s ease, transform .2s ease;
}
.gallery a:hover img{ border-color: var(--blood); transform: translateY(-2px); }

.videos{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1rem;
  margin-top: 1.4rem;
  margin-bottom: 2.6rem;
}
.video{ margin-top: 1.4rem; }
.video-frame{
  position: relative;
  aspect-ratio: 16 / 9;
  background: #000;
  border: 1px solid rgba(228,233,240,.2);
  border-radius: 8px;
  overflow: hidden;
}
.video-frame iframe{ position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.video figcaption{
  margin-top: .6rem;
  font-size: .8rem;
  letter-spacing: .1em;
  color: rgba(228,233,240,.55);
}

/* Tastenbelegung */
.binds{
  display: grid;
  grid-template-columns: minmax(9rem, 15rem) 1fr;
  gap: .1rem 1.5rem;
  margin-top: .8rem;
}
.binds dt{
  padding: .55rem 0;
  font-family: var(--display);
  font-weight: 600;
  font-size: .92rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #fff;
  border-bottom: 1px solid rgba(228,233,240,.1);
}
.binds dd{
  padding: .55rem 0;
  font-size: .93rem;
  color: rgba(228,233,240,.75);
  border-bottom: 1px solid rgba(228,233,240,.1);
}
@media (max-width: 600px){
  .binds{ grid-template-columns: 1fr; gap: 0; }
  .binds dt{ border-bottom: 0; padding-bottom: .1rem; }
  .binds dd{ margin-bottom: .4rem; }
}

.totop{
  display: block;
  position: relative;
  z-index: 5;
  padding: 0 5vw 3.5rem;
  text-align: center;
  font-size: .74rem;
  letter-spacing: .2em;
  text-transform: uppercase;
  text-decoration: none;
  color: rgba(228,233,240,.45);
}
.totop:hover{ color: var(--bone); }

/* ---------- Intro-Blende ---------- */
.curtain{
  position: fixed;
  inset: 0;
  z-index: 9;
  background: var(--ink);
  pointer-events: none;
}

@media (prefers-reduced-motion: no-preference){
  .curtain{ animation: curtainOut 1.7s ease .15s forwards; }
  @keyframes curtainOut{ to{ opacity: 0; visibility: hidden; } }

  .nav, .player, .stack{ opacity: 0; animation: rise 1.2s ease 1.05s forwards; }

  /* Tafel eigener Auftakt -- 'rise' wuerde mit transform:none die Drehung killen */
  .ach{ opacity: 0; animation: achRise 1.2s ease 1.05s forwards; }
  @keyframes achRise{
    from{ opacity: 0; transform: rotate(var(--ach-rot)) translateY(16px); }
    to  { opacity: 1; transform: rotate(var(--ach-rot)); }
  }
  @keyframes rise{
    from{ opacity: 0; transform: translateY(16px); }
    to  { opacity: 1; transform: none; }
  }
  .page .nav{ animation-delay: .05s; animation-duration: .6s; }

  /* Unterseiten: derselbe Auftakt wie die Startseite, nur kuerzer.
     Der Vorhang haengt hier am ::after des body - kein eigenes div noetig. */
  .page::after{
    content: "";
    position: fixed;
    inset: 0;
    z-index: 9;
    background: var(--ink);
    pointer-events: none;
    animation: curtainOut .55s ease .03s forwards;
  }
  .page .section{ opacity: 0; animation: rise .6s ease .12s forwards; }
  .page .totop{ opacity: 0; animation: rise .6s ease .28s forwards; }
}

@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior: auto; }
  .curtain, .bgfx, .grain{ display: none; }
  .bg, .panel h1{ animation: none; }
  .download, .download img{ transition: none; }
  .download:hover{ transform: none; }
}

/* ---------- Querformat: Gruppe kompakt ueber den Schriftzug ----------
   Alle Groessen an die Fensterhoehe gekoppelt, damit Trailer, Button und
   "Coming Soon" zusammen in das Band ueber dem Logo passen.
   Zu wenig Platz? Die 32vh beim Trailer verkleinern. */
@media (min-aspect-ratio: 1/1){
  :root{ --player-w: min(28vw, 440px, 32vh); }

  /* Trailer oben, Button unten am Bildrand */
  .hero{
    align-content: space-between;
    row-gap: 2vh;
    padding-top: clamp(2rem, 12vh, 7rem);      /* Trailer tiefer setzen */
    padding-bottom: clamp(1.5rem, 5vh, 3rem);
  }
  .stack{ gap: clamp(.4rem, 1vh, .7rem); }

  .download{
    padding: clamp(.4rem, 1vmin, .7rem) clamp(.6rem, 1.4vmin, 1rem);
  }
  .download img{ width: min(30vw, 400px); }
  .note{ font-size: clamp(.62rem, 1.4vh, .78rem); }
  /* "Coming Soon" liegt auf dem Button. Sobald in download.js eine Adresse
   steht, faellt die Klasse is-soon weg und der Text verschwindet mit ihr. */
.soon{
  position: absolute;
  inset: 0;
  display: grid;
  place-items: center;
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(1rem, 2.6vw, 1.7rem);
  letter-spacing: .26em;
  text-indent: .26em;
  text-transform: uppercase;
  color: #fff;
  text-shadow:
    0 2px 5px rgba(0,0,0,.95),
    0 0 20px rgba(0,0,0,.85),
    0 0 40px rgba(0,0,0,.7);
  pointer-events: none;
}
.download:not(.is-soon) .soon{ display: none; }

/* Countdown auf der Startseite */
.countdown{
  display: flex;
  gap: clamp(.9rem, 2.4vw, 1.9rem);
  margin-top: .3rem;
}
.countdown > div{
  display: grid;
  justify-items: center;
  gap: .1rem;
}
.countdown b{
  font-family: var(--display);
  font-weight: 800;
  font-size: clamp(1.5rem, 3.6vw, 2.4rem);
  line-height: 1;
  min-width: 2ch;
  text-align: center;
  color: #fff;
  text-shadow: 0 2px 8px rgba(0,0,0,.9), 0 0 22px rgba(0,0,0,.7);
}
.countdown span{
  font-family: var(--display);
  font-weight: 600;
  font-size: .58rem;
  letter-spacing: .22em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
}
.cd-date{
  font-family: var(--display);
  font-weight: 600;
  font-size: .66rem;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: rgba(63,155,224,.85);
}

.credit{ font-size: clamp(.66rem, 1.6vh, .9rem); }
}

/* ---------- Hochkant / schmale Displays ---------- */
@media (max-aspect-ratio: 1/1){
  :root{ --player-w: min(66vw, 340px); }

  .hero{
    align-content: space-between;
    row-gap: 3vh;
    padding-bottom: clamp(2rem, 7vh, 4rem);
  }
  .page .bg{ background-image: url("page-bg-portrait.jpg"); }

  .bg{
    /* noch kein eigenes Hochkant-Motiv: Querbild, Ausschnitt um den Spiegel */
    background-image: url("re9vr-bg.jpg");
    background-size: cover;
    background-position: 58% 45%;
    transform-origin: 58% 45%;
    animation-name: kenburnsPortrait;
  }
  @keyframes kenburnsPortrait{
    from{ transform: scale(1); }
    to  { transform: scale(1.05); }
  }

  .download img{ width: min(52vw, 275px); }

  /* zu schmal fuer eine Spalte neben dem Button -> wieder darunter */
  .ver{
    position: static;
    transform: none;
    display: block;
    margin: .25rem 0 0;
    text-align: right;
    font-weight: 600;
    font-size: .68rem;
  }
}

/* ==========================================================
   CHANGELOG (Info page) — sachliche Liste, keine Spielereien:
   Releases als Bloecke ohne Trennlinien, ruhige Kopfzeile, mittige Gruppen-
   koepfe -- der naechste sichtbare Strich ist erst wieder die rote hr vor der FAQ.
   Eintraege in zwei Spalten (Marke | Text).
   ========================================================== */

.changelog{ margin-top: 1.4rem; }

.rel{ border: 0; }

/* ---- Kopfzeile: Version, Status, Datum, Klapp-Zeichen ---- */
.rel > summary{
  position: relative;
  list-style: none;
  cursor: pointer;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: .5rem;
  padding: 1rem 2.2rem;
}
.rel > summary::-webkit-details-marker{ display: none; }
.rel > summary:hover{ background: rgba(228,233,240,.03); }

.rel .vblock{
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .45rem;
}
.rel .v{
  font-family: var(--display);
  font-weight: 800;
  font-size: 1.15rem;
  line-height: 1;
  letter-spacing: .12em;
  color: var(--bone);
}
.rel .v::before{ content: "Version "; font-size: 1em; font-weight: 800; letter-spacing: .12em; color: rgba(228,233,240,.75); }
.rel .v .r{ color: var(--blood); }
.rel[open] > summary .v{ color: #fff; }

/* ---- Release-Datum im Changelog (TEMPORAER bis 2.1 draussen ist) ----
   Gehoert zum Block .reldate-wrap in der info.html -- beides zusammen loeschen. */
.rel .reldate-wrap{
  display: grid;
  justify-items: center;
  gap: .3rem;
  margin-top: .6rem;
}
.rel .reldate-kicker{
  display: flex;
  align-items: center;
  gap: .8rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: .6rem;
  letter-spacing: .34em;
  text-indent: .34em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
}
.rel .reldate-kicker::before,
.rel .reldate-kicker::after{
  content: "";
  width: clamp(1.1rem, 5vmin, 2.4rem);
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(63,155,224,.75));
}
.rel .reldate-kicker::after{ transform: scaleX(-1); }

/* Versionszeile mit Strichen links und rechts: wie die Release-Kicker-Zeile,
   nur groesser. Benutzt im Changelog-Kopf (info.html) und auf der Media-Seite. */
.verline{
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  margin: 2.8rem 0 1.1rem;
  font-family: var(--display);
  font-weight: 800;
  font-size: 1rem;
  letter-spacing: .34em;
  text-indent: .34em;
  text-transform: uppercase;
  color: rgba(228,233,240,.72);
}
.verline::before,
.verline::after{
  content: "";
  width: clamp(1.4rem, 6vmin, 3.2rem);
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(63,155,224,.75));
}
.verline::after{ transform: scaleX(-1); }
.rel .verline{ margin: 0; }
.stack .verline{ margin: .2rem 0 0; }
.rel[open] > summary .verline{ color: #fff; }

.rel .reldate{
  font-family: var(--title);
  font-size: clamp(1.6rem, 6vmin, 2.6rem);
  line-height: 1;
  letter-spacing: .05em;
  background: linear-gradient(180deg,
              #dde9f7 0%, #3f9be0 56%, #1c46b8 100%);
  -webkit-background-clip: text;
          background-clip: text;
  color: transparent;
  animation: releaseGlow 3.8s ease-in-out infinite;
}
.rel .reldate i{
  font-style: normal;
  opacity: .45;
  padding: 0 .12em;
}
@media (prefers-reduced-motion: reduce){
  .rel .reldate{ animation: none; filter: drop-shadow(0 0 16px rgba(28,70,184,.4)); }
}

/* Teaser neben der Versionsnummer: sieht aus wie ein Knopf, damit klar ist dass man klickt */
/* eigene Zeile unter der Fortschrittsleiste, damit der Knopf als Knopf auffaellt */
.rel .teaserrow{
  display: flex;
  justify-content: center;
  margin-top: .9rem;
}
.rel .teaser{
  display: inline-flex;
  align-items: center;
  gap: .7em;
  font-family: var(--display);
  font-weight: 700;
  font-size: .72rem;
  line-height: 1;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--ember);
  padding: .85em 1.9em;
  border: 1px solid rgba(63,155,224,.55);
  border-radius: 2px;
  background: rgba(63,155,224,.10);
  transition: background .18s ease, color .18s ease, border-color .18s ease,
              transform .18s ease;
}
/* kleiner Pfeil im Knopf: zeigt runter, beim Aufklappen hoch */
.rel .teaser::after{
  content: "";
  width: 7px;
  height: 7px;
  margin-top: -3px;
  border-right: 1.6px solid currentColor;
  border-bottom: 1.6px solid currentColor;
  transform: rotate(45deg);
  transition: transform .2s ease;
}
.rel > summary:hover .teaser,
.rel > summary:focus-visible .teaser{
  color: #fff;
  background: rgba(63,155,224,.30);
  border-color: var(--ember);
  transform: translateY(-1px);
  animation: none;
}
.rel > summary:active .teaser{ transform: translateY(0); }

/* Pulsieren ueber die FARBE, nicht ueber einen Schein */
@media (prefers-reduced-motion: no-preference){
  .rel:not([open]) > summary .teaser{ animation: teaserBreathe 3s ease-in-out infinite; }
}
@keyframes teaserBreathe{
  0%,100%{ color: var(--ember); border-color: rgba(63,155,224,.55); background: rgba(63,155,224,.10); }
  50%    { color: #8cc4f6; border-color: rgba(63,155,224,.95); background: rgba(63,155,224,.24); }
}
.rel[open] > summary .teaser{
  color: rgba(228,233,240,.6);
  background: none;
  border-color: rgba(228,233,240,.28);
  box-shadow: none;
}
.rel[open] > summary .teaser::after{ transform: rotate(-135deg); margin-top: 2px; }

/* Klapp-Pfeil kraeftiger, sonst uebersieht man ihn */
.rel > summary::after{
  border-right-color: var(--ember);
  border-bottom-color: var(--ember);
  width: 10px;
  height: 10px;
}

/* Status als schlichtes Rahmen-Label, nicht als bunte Pille */
.rel .latest,
.rel .soonpill{
  font-family: var(--display);
  font-weight: 700;
  font-size: .66rem;
  line-height: 1;
  letter-spacing: .2em;
  text-transform: uppercase;
  padding: 0;
  border: 0;
  background: none;
}
.rel .latest{  color: rgba(228,233,240,.8); }
.rel .soonpill{ color: var(--ember); }

/* Datum rechts weg vom Rest */
.rel .date{
  font-family: var(--display);
  font-weight: 700;
  font-size: .66rem;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: rgba(228,233,240,.42);
}

/* Klapp-Zeichen: schlichter Pfeil statt Plus/Minus */
.rel > summary::after{
  content: "";
  position: absolute;
  right: .35rem;
  top: 50%;
  width: 8px;
  height: 8px;
  margin-top: -6px;
  border-right: 1.5px solid rgba(228,233,240,.5);
  border-bottom: 1.5px solid rgba(228,233,240,.5);
  transform: rotate(45deg);
  transition: transform .2s ease;
}
.rel[open] > summary::after{ transform: rotate(-135deg); margin-top: -2px; }

/* ---- Inhalt ---- */
.rel .body{ padding: .2rem 0 1.5rem; }

/* Statuszeile beim kommenden Release: eine Zeile, kein Kasten */
.wip{
  margin: .2rem 0 1.6rem;
  text-align: center;
  font-size: .84rem;
  line-height: 1.7;
  color: rgba(228,233,240,.55);
}

/* Gruppenkopf: kleine Versalien mit Linie, statt normaler h3 */
.rel h3{
  margin: 2rem 0 1rem;
  text-align: center;
  font-family: var(--display);
  font-weight: 700;
  font-size: .68rem;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: rgba(228,233,240,.55);
}
.rel h3:first-of-type{ margin-top: .3rem; }

/* Eintraege: feste Markenspalte, ruhige Zeilen */
.panel .log{ list-style: none; margin: 0; padding: 0; }
.panel .log li{
  display: grid;
  grid-template-columns: 6.2rem 1fr;
  gap: .2rem 1rem;
  align-items: baseline;
  padding: .42rem 0;
  font-size: .93rem;
  line-height: 1.7;
  color: rgba(228,233,240,.82);
}
.panel .log strong{ color: var(--bone); font-weight: 700; }

/* Zusatzhinweis unter einem Eintrag: eigene Zeile, ruhig abgesetzt */
.panel .log .log-note{
  display: block;
  margin-top: .5rem;
  padding: .35rem 0 .35rem .75rem;
  border-left: 2px solid rgba(63,155,224,.55);
  font-size: .85rem;
  line-height: 1.6;
  color: rgba(228,233,240,.66);
}
.panel .log .log-note b{
  font-family: var(--display);
  font-weight: 800;
  letter-spacing: .1em;
  text-transform: uppercase;
  font-size: .78em;
  color: rgba(63,155,224,.9);
}
@media (max-width: 560px){
  .panel .log li{ grid-template-columns: 1fr; gap: .35rem; }
}

/* Marken: einheitliche Form, Farbe nur als feiner Akzent */
.tag{
  justify-self: start;
  font-family: var(--display);
  font-weight: 700;
  font-size: .58rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  text-align: center;
  min-width: 5.4rem;
  padding: .34em .5em;
  border-radius: 2px;
  border: 1px solid;
  background: none;
  white-space: nowrap;
}
.tag.new{ color: #e8c24a;                 border-color: rgba(232,194,74,.7); }
.tag.imp{ color: var(--ember);            border-color: rgba(63,155,224,.5); }
.tag.fix{ color: #6fbf7a;                 border-color: rgba(111,191,122,.65); }
.tag.chg{ color: #a97fd6;                 border-color: rgba(169,127,214,.6); }

.older-note{
  margin-top: 1.2rem;
  font-size: .72rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: rgba(228,233,240,.35);
}
