/* ==========================================================================
   Kopfsteinpflaster – Plakatwand bei Nacht
   ========================================================================== */

:root {
    --asphalt: #0a0a0b;
    --pflaster: #151517;
    --kante: #2a2a2f;
    --knochen: #ece7de;
    --nebel: #9a9ca3;
    --blut: #ff2b4e;
    --blut-tief: #b3132f;
    --neon: #26e0ff;

    --schrift: "Protest Revolution", "Trebuchet MS", sans-serif;
    --mono: "Syne Mono", ui-monospace, monospace;

    --text-gross: clamp(1.15rem, 0.35vw + 1.05rem, 1.3rem);
    --umriss:
        2px 0 #000,
       -2px 0 #000,
        0 2px #000,
        0 -2px #000,
        1px 1px #000,
       -1px -1px #000,
        1px -1px #000,
       -1px 1px #000;
}

*,
*::before,
*::after {
    box-sizing: border-box;
}

html {
    scroll-padding-top: 5rem;
}

body {
    background-color: var(--asphalt);
    color: var(--knochen);
    margin: 0;
    padding: 0;
    font-family: var(--schrift);
    font-size: var(--text-gross);
    line-height: 1.65;
    letter-spacing: 0.01em;
    hyphens: auto;
    -webkit-font-smoothing: antialiased;
}

/* feine Körnung wie auf einem nassen Plakat */
body::after {
    content: "";
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 2500;
    opacity: 0.05;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

p {
    text-wrap: pretty;
}

img {
    max-width: 100%;
}

a {
    color: var(--blut);
    text-decoration-thickness: 1px;
    text-underline-offset: 0.2em;
    transition: color 0.3s;
}

a:hover {
    color: var(--knochen);
}

:focus-visible {
    outline: 2px solid var(--neon);
    outline-offset: 4px;
}

#wiki_link {
    color: var(--blut);
}

/* ==========================================================================
   Überschriften
   ========================================================================== */

h1,
h2,
h3 {
    font-weight: 400;
    line-height: 1.1;
}

h1 {
    font-size: clamp(2.6rem, 7vw, 5.5rem);
    text-shadow: var(--umriss);
}

h2 {
    text-align: center;
    text-shadow: var(--umriss);
}

/* Abschnittsüberschrift mit Sprühfarben-Markierung */
h2.subheader {
    position: relative;
    isolation: isolate;
    width: fit-content;
    max-width: min(90%, 32ch);
    margin: clamp(3rem, 7vw, 5rem) auto 1.75rem;
    padding: 0 0.35em;
    font-size: clamp(1.9rem, 2.4vw + 1.1rem, 2.8rem);
    text-wrap: balance;
}

h2.subheader::before {
    content: "";
    position: absolute;
    z-index: -1;
    left: -0.15em;
    right: -0.25em;
    bottom: 0.02em;
    height: 0.5em;
    background: var(--blut-tief);
    transform: rotate(-1.4deg) skewX(-12deg);
    clip-path: polygon(1% 18%, 9% 4%, 27% 12%, 46% 0, 63% 9%, 81% 2%, 99% 14%, 100% 72%, 92% 96%, 74% 84%, 55% 100%, 36% 88%, 17% 98%, 3% 86%, 0 55%);
}

h3.subheader {
    margin: 0 0 0.9rem;
    font-size: clamp(1.35rem, 0.8vw + 1.1rem, 1.65rem);
    text-align: center;
}

/* ==========================================================================
   Glitch-Überschriften
   ========================================================================== */

.glitch-heading{
    position: relative;
    overflow: hidden;
}
.glitch-heading::before,
.glitch-heading::after{
    content: attr(data-text);
    position: absolute;
    inset: 0;
    width: 100%;
    pointer-events: none;
    text-shadow: none;
    opacity: 0;
    /* falls die Überschrift eigenes padding hat (z.B. h1), zählt das sonst zur
       Höhe dieser Layer mit rein und verschiebt die Bänder nach oben weg vom
       Text — inherit + content-box lässt die Prozentwerte relativ zur reinen
       Textzeile rechnen, unabhängig vom padding */
    padding: inherit;
    box-sizing: border-box;
    clip-path: polygon(0 0, 100% 0, 100% 0, 0 0) content-box;
}
.glitch-heading::before{
    color: #ff2b4e;
    clip-path: polygon(0 22%, 100% 18%, 97% 30%, 100% 27%, 0 34%) content-box;
    animation: heading-idle-red 6s linear infinite;
}
.glitch-heading::after{
    color: #26e0ff;
    clip-path: polygon(0 58%, 100% 54%, 96% 66%, 100% 63%, 0 70%) content-box;
    animation: heading-idle-cyan 6s linear infinite;
}
.glitch-heading.glitching{
    animation: heading-flicker 600ms steps(1, end) 1;
}
.glitch-heading.glitching::before{
    animation: glitch-slice-red 600ms steps(1, end) 1;
}
.glitch-heading.glitching::after{
    animation: glitch-slice-cyan 600ms steps(1, end) 1;
}
/* dezente Ruheversion: die Bandhöhe bleibt fix, nur ein kurzer Ausschlag nach
   rechts und links blitzt selten auf — Bewegung ist rein horizontal */
@keyframes heading-idle-red{
    0%, 95%, 100% { opacity: 0; transform: translateX(0); }
    96% { opacity: 0.18; transform: translateX(4px); }
    97% { opacity: 0.18; transform: translateX(-4px); }
    98% { opacity: 0; transform: translateX(0); }
}
@keyframes heading-idle-cyan{
    0%, 95%, 100% { opacity: 0; transform: translateX(0); }
    96% { opacity: 0.18; transform: translateX(-4px); }
    97% { opacity: 0.18; transform: translateX(4px); }
    98% { opacity: 0; transform: translateX(0); }
}
@keyframes heading-flicker{
    0%, 100% { opacity: 1; }
    8% { opacity: 0.4; }
    16% { opacity: 1; }
    42% { opacity: 0.5; }
    50% { opacity: 1; }
    74% { opacity: 0.3; }
    82% { opacity: 1; }
}
/* Ausbruch: die Bandhöhe bleibt fix, die Bewegung schlägt innerhalb desselben
   Glitch-Vorgangs mehrfach nach rechts und links aus — rein horizontales
   Ruckeln statt vertikalem Springen zwischen Bandpositionen */
@keyframes glitch-slice-red{
    0%, 100% { opacity: 0; transform: translateX(0); }
    8% { opacity: 0.85; transform: translateX(18px); }
    16% { opacity: 0.85; transform: translateX(-16px); }
    24% { opacity: 0; transform: translateX(0); }
    40% { opacity: 0.8; transform: translateX(22px); }
    48% { opacity: 0.8; transform: translateX(-14px); }
    56% { opacity: 0; transform: translateX(0); }
    72% { opacity: 0.6; transform: translateX(12px); }
    80% { opacity: 0.6; transform: translateX(-20px); }
    88% { opacity: 0; transform: translateX(0); }
}
@keyframes glitch-slice-cyan{
    0%, 100% { opacity: 0; transform: translateX(0); }
    12% { opacity: 0.8; transform: translateX(-15px); }
    20% { opacity: 0.8; transform: translateX(19px); }
    28% { opacity: 0; transform: translateX(0); }
    44% { opacity: 0.75; transform: translateX(-21px); }
    52% { opacity: 0.75; transform: translateX(13px); }
    60% { opacity: 0; transform: translateX(0); }
    76% { opacity: 0.7; transform: translateX(-17px); }
    84% { opacity: 0.7; transform: translateX(9px); }
    92% { opacity: 0; transform: translateX(0); }
}

/* ==========================================================================
   Navigation
   ========================================================================== */

nav {
    position: sticky;
    top: 0;
    z-index: 1000;
    display: flex;
    justify-content: center;
    padding: 1rem 1rem;
    background-color: rgba(10, 10, 11, 0.86);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    border-bottom: 1px solid var(--kante);
}

.nav-links {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.25rem clamp(1rem, 4vw, 3.5rem);
}

nav a {
    position: relative;
    display: inline-block;
    padding: 0.35rem 0.15rem;
    font-size: 1.3rem;
    color: var(--knochen);
    text-decoration: none;
    letter-spacing: 0.04em;
    transition: color 0.3s;
}

nav a::after {
    content: "";
    position: absolute;
    left: -0.1em;
    right: -0.1em;
    bottom: 0.2rem;
    height: 0.32em;
    background: var(--blut-tief);
    transform: rotate(-1.5deg) skewX(-12deg) scaleX(0);
    transform-origin: left center;
    transition: transform 0.3s ease-out;
    z-index: -1;
}

nav a:hover {
    color: #fff;
}

nav a:hover::after,
nav a[aria-current="page"]::after {
    transform: rotate(-1.5deg) skewX(-12deg) scaleX(1);
}

.nav-toggle {
    display: none;
    align-items: center;
    gap: 0.6rem;
    min-height: 44px;
    margin: 0 auto;
    background: none;
    border: 1px solid var(--nebel);
    color: var(--knochen);
    font-family: var(--schrift);
    font-size: 1.15rem;
    letter-spacing: 0.05em;
    padding: 0.4rem 1.25rem;
    cursor: pointer;
    transition: color 0.3s, border-color 0.3s;
}

.nav-toggle:hover {
    color: #fff;
    border-color: var(--blut);
}

.nav-toggle-icon {
    font-size: 1.2rem;
    line-height: 1;
}

/* ==========================================================================
   Hero
   ========================================================================== */

header {
    text-align: center;
}

#hero_index,
#hero_spielwelt,
#hero_kontakt,
#hero_charaktere,
#hero_rules {
    position: relative;
    isolation: isolate;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    align-items: center;
    min-height: 72vh;
    padding: 6rem 1.25rem clamp(2rem, 6vh, 4rem);
    background-size: cover;
    background-position: center;
    background-attachment: fixed;
}

#hero_index {
    min-height: 82vh;
    background-image: url("bilder/ghoul.png");
}
#hero_spielwelt {
    background-image: url("bilder/clutter.png");
}
#hero_kontakt {
    background-image: url("bilder/dreaming_cat.png");
}
#hero_charaktere {
    background-image: url("bilder/group.png");
}
#hero_rules {
    background-image: url("bilder/info_material.png");
}

/* Verlauf ins Schwarz, damit der Titel auf jedem Bild lesbar steht */
#hero_index::after,
#hero_spielwelt::after,
#hero_kontakt::after,
#hero_charaktere::after,
#hero_rules::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background: linear-gradient(180deg, rgba(10, 10, 11, 0) 35%, rgba(10, 10, 11, 0.7) 75%, var(--asphalt) 100%);
}

header h1 {
    margin: 0;
    padding: 0;
    line-height: 1.05;
    color: #fff;
}

header h2 {
    margin: 0.6rem 0 0;
    max-width: 30ch;
    font-size: clamp(1.3rem, 2.2vw + 0.6rem, 2.1rem);
    color: var(--knochen);
}

/* ==========================================================================
   Fließtext
   ========================================================================== */

.top_txt {
    width: min(64ch, calc(100% - 2.5rem));
    margin: 0 auto;
}

.top_txt p {
    margin: 0 0 1.1em;
}

main ul {
    width: min(64ch, calc(100% - 2.5rem));
    margin: 0.4em auto 1.5em;
    padding-left: 1.4em;
}

.top_txt ul {
    width: auto;
}

main li {
    margin-bottom: 0.35em;
}

main li::marker {
    color: var(--blut);
}

/* In-World-Erzählung als Fundstück */
.bark {
    width: min(60ch, calc(100% - 2rem));
    margin: clamp(3rem, 7vw, 5rem) auto 0;
    --karte: var(--pflaster);
    padding: clamp(1.5rem, 4vw, 2.75rem);
    font-size: clamp(1.2rem, 0.45vw + 1.1rem, 1.4rem);
    line-height: 1.7;
    transform: rotate(-0.4deg);
}

.bark p {
    margin: 0;
}

.bark p::first-letter {
    float: left;
    margin: 0.06em 0.14em 0 0;
    font-size: 3.6em;
    line-height: 0.82;
    color: var(--blut);
}

/* ==========================================================================
   Trenner
   ========================================================================== */

.paragraph {
    margin: clamp(2.5rem, 6vw, 4.5rem) 0;
}

.paragraph img {
    display: block;
    margin: 0 auto;
}

.symbol {
    width: min(720px, 92vw);
    height: auto;
    aspect-ratio: 720 / 200;
    object-fit: cover;
    object-position: 50% 46%;
    mix-blend-mode: screen;
}

.gap {
    margin-top: clamp(2rem, 5vw, 3.5rem);
}

/* ==========================================================================
   Startseite: Einleitung mit Bild
   ========================================================================== */

.intro {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(2rem, 5vw, 4rem);
    align-items: start;
    width: min(1320px, calc(100% - 2.5rem));
    margin: 0 auto;
}

.intro > .text p {
    margin: 0 0 1.1em;
}

/* Bild bleibt beim Lesen des langen Textes daneben stehen */
.intro-picture {
    position: sticky;
    top: 6rem;
    display: flex;
    align-items: center;
    justify-content: center;
}

.intro-picture img {
    width: min(100%, calc(100vh - 8rem));
    height: auto;
    aspect-ratio: 1;
    object-fit: cover;
    border: 1px solid var(--kante);
}

/* ==========================================================================
   Karten-Reihen
   ========================================================================== */

.row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(310px, 100%), 1fr));
    gap: clamp(1rem, 2.5vw, 2rem);
    width: min(1150px, calc(100% - 2.5rem));
    margin: 2rem auto 0;
}

.row > div,
.carousel-track > div {
    --karte: rgba(21, 21, 23, 0.94);
    padding: 1.75rem 1.6rem 1.6rem;
    text-align: left;
    font-size: 1.08rem;
    line-height: 1.6;
}

.row > div p,
.carousel-track > div p {
    margin: 0 0 0.9em;
}

.row > div p:last-child,
.carousel-track > div p:last-child {
    margin-bottom: 0;
}

.row h3.subheader,
.carousel-track h3.subheader {
    position: relative;
    text-align: left;
    padding-bottom: 0.6rem;
}

.row h3.subheader::after,
.carousel-track h3.subheader::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: 2.5rem;
    height: 3px;
    background: var(--blut);
}

/* ==========================================================================
   Schiefe Karten
   Die Karte selbst trägt die Randfarbe, ::before legt die Füllung 1px
   eingerückt mit derselben Form darüber. So bleibt der Rand auch an
   schrägen Kanten sichtbar.
   ========================================================================== */

.row > div,
.carousel-track > div,
.bark,
.bezirk-info {
    --ecken: polygon(0 10px, calc(100% - 6px) 0, 100% calc(100% - 14px), 12px 100%);
    position: relative;
    isolation: isolate;
    background: #45454d;
    border: 0;
    clip-path: var(--ecken);
}

.row > div:nth-child(3n+2),
.carousel-track > div:nth-child(3n+2),
.bark:nth-child(3n+2) {
    --ecken: polygon(9px 0, 100% 14px, calc(100% - 10px) 100%, 0 calc(100% - 7px));
}

.row > div:nth-child(3n+3),
.carousel-track > div:nth-child(3n+3),
.bark:nth-child(3n+3) {
    --ecken: polygon(0 0, calc(100% - 14px) 9px, 100% 100%, 6px calc(100% - 16px));
}

.row > div::before,
.carousel-track > div::before,
.bark::before,
.bezirk-info::before {
    content: "";
    position: absolute;
    inset: 1px;
    z-index: -1;
    background: var(--karte);
    clip-path: var(--ecken);
}

/* ==========================================================================
   Karussell (Glossar)
   ========================================================================== */

.carousel {
    --karussell-gap: clamp(1rem, 2vw, 1.5rem);
    width: min(1320px, calc(100% - 2.5rem));
    margin: 2rem auto 0;
}

.carousel-track {
    display: grid;
    grid-auto-flow: column;
    grid-auto-columns: calc((100% - 3 * var(--karussell-gap)) / 4);
    gap: var(--karussell-gap);
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    scrollbar-width: none;
}

.carousel-track::-webkit-scrollbar {
    display: none;
}

.carousel-track > div {
    scroll-snap-align: start;
}

.carousel-controls {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
}

.carousel-controls:first-child {
    margin-bottom: 1rem;
}

.carousel-controls:last-child {
    margin-top: 1rem;
}

.carousel-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    padding: 0;
    background: none;
    border: 1px solid var(--nebel);
    color: var(--knochen);
    cursor: pointer;
    transition: color 0.3s, border-color 0.3s, background-color 0.3s, opacity 0.3s;
}

.carousel-btn:hover:not(:disabled) {
    color: #fff;
    border-color: var(--blut);
    background-color: var(--blut-tief);
}

.carousel-btn:disabled {
    opacity: 0.3;
    cursor: default;
}

.carousel-status {
    display: flex;
    align-items: center;
    gap: 1rem;
}

.carousel-dots {
    display: flex;
}

/* Seitenpunkte als kurze Sprühstriche, wie unter den Überschriften */
.carousel-dots button {
    width: 44px;
    height: 44px;
    padding: 0;
    background: none;
    border: 0;
    cursor: pointer;
}

.carousel-dots button::before {
    content: "";
    display: block;
    width: 28px;
    height: 8px;
    margin: 0 auto;
    background: var(--kante);
    transform: skewX(-12deg);
    transition: background-color 0.3s;
}

.carousel-dots button:hover::before {
    background: var(--nebel);
}

.carousel-dots button.active::before {
    background: var(--blut);
}

.carousel-count {
    min-width: 3.5em;
    font-family: var(--mono);
    font-size: 0.85rem;
    letter-spacing: 0.08em;
    color: var(--nebel);
}

@media (max-width: 1100px) {
    .carousel-track {
        grid-auto-columns: calc((100% - var(--karussell-gap)) / 2);
    }
}

@media (max-width: 640px) {
    .carousel-track {
        grid-auto-columns: 85%;
    }

    /* 12 Seitenpunkte passen nicht in die Breite, der Zähler reicht hier */
    .carousel-dots {
        display: none;
    }
}

/* Glossar (Hintergrundbild bilder/cricle.png bewusst entfernt, Datei bleibt erhalten) */
#circle {
    padding: 2rem 0 3rem;
}

/* ==========================================================================
   Berlin-Karte
   ========================================================================== */

.map-intro {
    width: 100%;
    text-align: center;
}

.berlin-map-wrap {
    width: min(700px, 92%);
    margin: 0 auto;
    text-align: center;
}

.berlin-map {
    display: block;
    width: 100%;
    height: auto;
}

.bezirk {
    fill: #2a2a2e;
    stroke: var(--knochen);
    stroke-width: 1.5;
    stroke-linejoin: round;
    cursor: pointer;
    outline: none;
    transition: fill 0.3s, stroke 0.3s;
}

.bezirk:hover,
.bezirk:focus-visible {
    fill: #5a1420;
    stroke: var(--blut);
}

.bezirk:focus-visible {
    stroke: var(--neon);
    stroke-width: 3;
}

.bezirk.selected {
    fill: var(--blut);
    stroke: var(--knochen);
}

.map-credit {
    margin-top: 0.25rem;
    font-family: var(--mono);
    font-size: 0.7rem;
    color: var(--nebel);
    text-align: right;
}

.bezirk-info {
    margin: 2rem auto 0;
    max-width: 600px;
    --karte: var(--pflaster);
    padding: 1.75rem 1.75rem 1.5rem;
    text-align: left;
}

/* roter Akzent folgt der schiefen Oberkante: die Füllung beginnt tiefer */
.bezirk-info.bezirk-info {
    background: linear-gradient(var(--blut) 0 18px, #45454d 18px);
}

.bezirk-info::before {
    top: 4px;
}

.bezirk-info h3 {
    margin: 0 0 0.4rem;
    font-size: 1.7rem;
}

.bezirk-info p {
    margin: 0 0 0.8em;
}

.platzhalter-hinweis {
    font-family: var(--mono);
    font-size: 0.85rem;
    letter-spacing: 0.04em;
    color: var(--nebel);
}

/* ==========================================================================
   Intro-Popup (Startseite)
   ========================================================================== */

#intro-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.85);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    z-index: 2000;
    align-items: center;
    justify-content: center;
    padding: 1rem;
}

#intro-overlay.visible {
    display: flex;
}

#intro-popup {
    position: relative;
    width: min(920px, 100%);
    max-height: 92vh;
    overflow-y: auto;
    padding: clamp(1.25rem, 3vw, 2.25rem) clamp(1.25rem, 4vw, 3rem);
    background-color: var(--asphalt);
    border: 1px solid var(--kante);
    border-top: 3px solid var(--blut);
    box-shadow: 0 2rem 5rem rgba(0, 0, 0, 0.8);
    text-align: center;
}

#intro-image {
    max-width: 100%;
    max-height: 300px;
    width: auto;
    height: auto;
    display: block;
    margin: 0.75rem auto;
}

#intro-popup h1 {
    font-size: clamp(2rem, 4vw, 2.6rem);
    padding-top: 0;
    margin: 0 0 0.25rem;
}

#intro-keywords {
    margin: 0 0 1rem;
    font-family: var(--mono);
    font-size: 0.8rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--nebel);
}

.intro-text {
    max-width: 60ch;
    margin: 0 auto 0.6rem;
    text-align: left;
    font-size: 1.05rem;
    line-height: 1.5;
}

#intro-popup .row {
    width: 100%;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 0.75rem;
    margin-top: 1rem;
}

#intro-popup .row > div {
    padding: 1rem 1.1rem;
}

#intro-popup .row .subheader {
    font-size: 1.25rem;
    margin-bottom: 0.6rem;
}

#intro-popup .row p {
    font-size: 0.98rem;
    line-height: 1.45;
}

#intro-close {
    display: block;
    min-height: 44px;
    margin: 1.25rem auto 0;
    padding: 0.4rem 1.75rem;
    background: none;
    border: 1px solid var(--nebel);
    color: var(--knochen);
    font-family: var(--schrift);
    font-size: 1.15rem;
    letter-spacing: 0.05em;
    cursor: pointer;
    transition: color 0.3s, border-color 0.3s, background-color 0.3s;
}

#intro-close:hover {
    color: #fff;
    border-color: var(--blut);
    background-color: var(--blut-tief);
}

/* ==========================================================================
   Kontakt
   ========================================================================== */

.contact_img {
    display: block;
    margin: 0 auto;
    width: 200px;
    max-width: 60vw;
    height: auto;
    transition: transform 0.3s, filter 0.3s;
}

a:hover .contact_img,
a:focus-visible .contact_img {
    transform: scale(1.06);
    filter: drop-shadow(0 0 1.25rem rgba(255, 43, 78, 0.55));
}

/* ==========================================================================
   Footer
   ========================================================================== */

#footer_img {
    display: block;
    width: min(1200px, 92vw);
    margin: clamp(3rem, 7vw, 5rem) auto 0;
}

#impressum_link {
    display: block;
    margin-top: 1rem;
    padding: 1.5rem 1rem;
    border-top: 1px solid var(--kante);
    text-align: center;
}

#impressum_link a {
    font-family: var(--mono);
    font-size: 0.85rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--nebel);
    text-decoration: none;
}

#impressum_link a:hover {
    color: var(--blut);
}

/* ==========================================================================
   Impressum
   ========================================================================== */

body.legal {
    font-size: 1.1rem;
}

.legal-main {
    width: min(42rem, calc(100% - 2.5rem));
    margin: 0 auto;
    padding: clamp(2.5rem, 7vw, 4.5rem) 0;
}

.legal h1 {
    margin: 0 0 2rem;
    padding-bottom: 1rem;
    font-size: clamp(2.4rem, 5vw, 3.4rem);
    border-bottom: 1px solid var(--kante);
}

.legal h2 {
    margin: 0 0 0.75rem;
    font-size: 1.6rem;
    text-align: left;
}

.legal h3 {
    margin: 0 0 0.4rem;
    font-size: 1.3rem;
}

.legal p {
    margin: 0 0 0.35rem;
}

.legal-section {
    margin-bottom: 2rem;
}

.legal-hinweise {
    display: grid;
    gap: 1.5rem;
    padding-top: 1.75rem;
    border-top: 1px solid var(--kante);
}

.legal-hinweise p {
    font-size: 1rem;
    line-height: 1.6;
    color: #c9c5bd;
}

.legal-footer {
    margin-top: 3rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--kante);
}

.legal-footer a {
    font-family: var(--mono);
    font-size: 0.85rem;
    letter-spacing: 0.08em;
    color: var(--nebel);
    text-decoration: none;
}

.legal-footer a:hover {
    color: var(--blut);
}

/* ==========================================================================
   Responsiv
   ========================================================================== */

@media (max-width: 900px) {
    .intro {
        grid-template-columns: minmax(0, 1fr);
        width: min(64ch, calc(100% - 2.5rem));
    }

    .intro-picture {
        position: static;
    }

    .intro-picture img {
        width: auto;
        max-height: 60vh;
    }
}

@media (max-width: 768px) {
    #hero_index, #hero_spielwelt, #hero_kontakt, #hero_charaktere, #hero_rules {
        background-attachment: scroll;
        min-height: 60vh;
    }

    nav {
        padding: 0.75rem 1rem;
    }

    .nav-toggle {
        display: inline-flex;
    }

    .nav-links {
        display: none;
        flex-direction: column;
        align-items: center;
        position: absolute;
        left: 0;
        right: 0;
        top: 100%;
        padding: 0.5rem 0 1.25rem;
        background-color: var(--asphalt);
        border-bottom: 1px solid var(--kante);
    }

    .nav-links.open {
        display: flex;
    }

    nav a {
        padding: 0.6rem 0.25rem;
    }

    .bark {
        transform: none;
    }
}

@media (max-width: 600px) {
    body {
        line-height: 1.6;
    }

    .row > div,
    .carousel-track > div {
        padding: 1.25rem;
    }

    #intro-popup .row {
        grid-template-columns: minmax(0, 1fr);
    }
}

@media (prefers-reduced-motion: reduce){
    *,
    *::before,
    *::after {
        transition: none !important;
    }

    .glitch-heading,
    .glitch-heading.glitching{
        animation: none;
    }
    .glitch-heading::before,
    .glitch-heading::after,
    .glitch-heading.glitching::before,
    .glitch-heading.glitching::after{
        animation: none;
        display: none;
    }
}
