/* ===== SoulKeeper - Level 1: Die Oberwelt ==============================
   Mehrschichtige Parallax-Szene. #himmel-hintergrund (siehe css/base.css,
   css/himmel.css) läuft durchgehend über Himmel UND Level 1 und bleibt
   hier unangetastet - alles in dieser Datei liegt darüber. Ebenen von
   hinten nach vorne (siehe auch index.html):
     1. Himmel          (#himmel-hintergrund, css/himmel.css)
     2. Mond            (.level1-mond) - eigenständige Ebene, siehe dort
     3. hintere Ebene   (.level1-ebene--hinten, theme-abhängig eingefärbt)
                          - ebenfalls eigenständig, kein .scene-Kind mehr
     4. vordere Ebene   (.level1-ebene--vorne, schwarz, Spielbereich)
     5. Kamera-Ebene    (.level1-kamera-ebene, Tiefenunschärfe)
   Himmel, Mond und hintere Ebene sind bewusst voneinander unabhängige,
   durchgehende Ebenen über #story-track (nicht in #scene-level1
   eingesperrt) - jede mit eigenem Tempo/Timing beim Kameraübergang, das
   ist der eigentliche Parallax-Effekt. Grabstein-/Baum-Platzierung (feste
   Positionen, zufällige Asset-Auswahl) kommt aus js/level1-szene.js - hier
   nur das Aussehen der von dort erzeugten Elemente
   (.level1-grabstein/.level1-baum). */

.level1-platzhalter {
    /* .scene bringt schon position:relative/overflow:hidden mit (siehe
       css/base.css) - hier nur Kontext für die Kommentare oben. */
}

/* ===== Ebene 2: Mond =====
   Farbe/Glow theme-abhängig (siehe --accent/--accent-bright in
   css/variables.css) - Mond.png ist eine Graustufen-Aufnahme, die per
   mask-image (nutzt die PNG-Alpha/Silhouette) exakt auf den Mond-Umriss
   begrenzt und mit mix-blend-mode:color eingefärbt wird, ohne die
   Krater-Schattierung zu verlieren.

   Liegt (siehe index.html) als eigene Ebene direkt neben #himmel-
   hintergrund, NICHT innerhalb einer einzelnen .scene - jede .scene hat
   overflow:hidden, an der Nahtstelle Himmel/Level 1 hätte das den
   Mondschein sichtbar abgeschnitten ("wie zwei angeklebte Bereiche").
   top ist deshalb in vh (relativ zur vollen #story-track-Höhe), nicht in %
   einer einzelnen Szene. z-index:0, aber NACH #himmel-hintergrund im DOM -
   liegt dadurch über dem Sternenhimmel, aber unter allen .scene-Inhalten
   (z-index:1+, siehe css/base.css) - genau "zwischen Himmel und
   Friedhofsebene".

   Bewusst schon im Himmel-Bildschirm sichtbar (unterer Bereich, top:60vh
   trifft dort auf keine Kamerafahrt, entspricht 60% Bildschirmhöhe) -
   kein Versteckspiel mehr, der Mond gehört von Anfang an zur Szene. Beim
   Übergang fährt er von dort weiter in die (bereits stimmige)
   Zielposition .level1-mond--eingefahren (top:88vh) - dieselbe Dauer/
   Kurve wie die Kamerafahrt in css/base.css. Ausgelöst im selben Moment
   wie .story-track--level1 (siehe js/main.js, js/levelkarte.js). */
.level1-mond {
    position: absolute;
    top: calc(60 * var(--uh));
    right: 9%;
    width: min(calc(24 * var(--uw)), 340px);
    aspect-ratio: 1 / 1;
    z-index: 0;
    transition: top 4s cubic-bezier(0.65, 0, 0.35, 1);
}

.level1-mond--eingefahren {
    top: calc(88 * var(--uh));
}

.level1-mond-glow {
    position: absolute;
    inset: -12%;
    background: radial-gradient(circle, var(--accent-bright) 0%, var(--accent) 25%, transparent 50%);
    filter: blur(14px);
    opacity: 0.22;
    transition: background var(--theme-transition), opacity var(--theme-transition);
}

.level1-mond-bild {
    position: relative;
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.level1-mond-tint {
    position: absolute;
    inset: 0;
    background: var(--accent);
    -webkit-mask-image: url('../../sh/img/level1/Mond.png');
    mask-image: url('../../sh/img/level1/Mond.png');
    -webkit-mask-size: contain;
    mask-size: contain;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: center;
    mask-position: center;
    mix-blend-mode: color;
    opacity: 0.8;
    transition: background var(--theme-transition);
}

/* ===== Ebene 3: hintere Friedhofsebene (eigenständig, wie der Mond) =====
   Liegt (siehe index.html) als eigene Ebene direkt neben #himmel-
   hintergrund/.level1-mond, NICHT innerhalb von #scene-level1 - dessen
   overflow:hidden hätte sie an der Nahtstelle Himmel/Level 1 abgeschnitten
   ("mitten im Himmel"), und als starres Kind von #story-track hätte sie
   sich nur exakt mit der Kamerafahrt mitbewegt, ohne eigenen Tiefeneffekt.

   Start: aus Sicht von Level 1 bei ca. 40% (zwischen oberem Drittel und
   Hälfte), Ziel: Boden-Unterkante exakt am unteren Bildschirmrand.

   WICHTIG: bewusst über TOP positioniert, nicht bottom - top:130vh/90vh
   sind (wie bei .level1-mond) Track-Positionen relativ zur TOP-Kante von
   #story-track, die sich nie verschiebt, egal wie viele Ebenen später
   angehängt werden. Ein früherer Versuch mit bottom:20vh/60vh maß
   dagegen von der UNTEREN Kante von #story-track - als mit Level 2 eine
   dritte Ebene dazukam und --ebenen-anzahl (also die Gesamthöhe von
   #story-track) von 200vh auf 300vh wuchs, verschob sich dieser
   Bezugspunkt um 100vh nach unten und die komplette Ebene (samt Bäumen/
   Grabsteinen) landete im Sichtfenster von Level 2 statt Level 1. top
   hat dieses Problem nicht, weil sich die obere Kante von #story-track
   beim Anhängen weiterer Ebenen nie verschiebt.

   top:130vh (Ziel) + height:50vh = Bodenunterkante bei Track-Position
   180vh - bei Kamerafahrt -80vh entspricht das exakt dem unteren Rand des
   100vh-Sichtfensters [80vh,180vh]. top:90vh (Start) + height:50vh =
   Unterkante bei 140vh = 100vh(Himmel/Level1-Nahtstelle) + 40vh = 40% von
   Level 1s eigenen 100vh, bleibt vor dem Übergang unsichtbar (140vh liegt
   außerhalb des unverschobenen Sichtfensters [0,100vh]). Siehe
   .level1-hinten-untergrund weiter unten für die Farbfläche, die
   währenddessen verhindert, dass unter dem Boden Himmel durchscheint -
   sitzt als Kind IN dieser Ebene, bewegt sich also automatisch mit
   derselben top-Transition mit. */
.level1-ebene--hinten {
    position: absolute;
    left: 0;
    width: 100%;
    height: calc(50 * var(--uh));
    top: calc(90 * var(--uh));
    z-index: 0;
    transition: top 4s cubic-bezier(0.65, 0, 0.35, 1);
}

/* ===== Hexen-Fernbereich (nur Boss-Container) =====
   Sitzt (siehe index.html - DOM-Reihenfolge zwischen .level1-mond und
   .level1-ebene--hinten, beide z-index:0) exakt zwischen Mond und
   gefärbtem Berg: gemalt NACH dem Mond (liegt also davor), aber VOR dem
   gefärbten Berg (liegt also dahinter) - unabhängig vom eigenen z-index,
   da Geschwister-Reihenfolge innerhalb derselben Stapelebene entscheidet.
   Feste Track-Position statt der %-Werte von .level1-spielbereich (kein
   #scene-level1-Elternelement hier vorhanden) - deckt sich exakt mit dessen
   bereits eingefahrener Position: #scene-level1 beginnt bei Track 100vh,
   .level1-spielbereich darin bei top:35%/bottom:0 der 100vh-Szenenhöhe =
   Track [135vh, 200vh]. Bewusst NICHT an die (noch fahrende) top-Transition
   von .level1-ebene--hinten gekoppelt - dieser Container bleibt während des
   gesamten Levels leer/unsichtbar (aria-hidden) bis das eigentliche
   Gameplay beginnt, ein Mitfahren beim Kameraübergang ist nicht nötig. */
.level1-spielbereich-hexenfern {
    position: absolute;
    left: 28%;
    right: 28%;
    top: calc(135 * var(--uh));
    height: calc(65 * var(--uh));
    z-index: 0;
    pointer-events: none;
}

.level1-ebene--hinten.level1-ebene--eingefahren {
    top: calc(130 * var(--uh));
}

/* Farbfläche, die IMMER direkt unterhalb der Boden-Unterkante ansetzt
   (top:100% = exakt an der Unterkante von .level1-ebene--hinten, wo auch
   .level1-boden--hinten sitzt) und großzügig weiter nach unten reicht -
   deckt so während der Bewegung die Lücke zwischen aktueller Boden-
   Position und dem tatsächlichen unteren Bildschirmrand ab, OHNE (wie
   eine große statische Fläche es tun würde) am Ende auch den Himmel-
   Bereich OBERHALB des Bodens zu verdecken. Muss vor .level1-boden--hinten
   im DOM stehen, damit sie dahinter liegt.

   Reicht (100vh) bei "eingefahren" von Track-Position 180vh bis 280vh -
   mit Level 2 (Nahtstelle bei 200vh) liegt ihr Anfang (180-200vh) jetzt
   noch VOR Level 2s eigenem Höhlenhintergrund.

   Durchgehend --level2-hoehle-bg (Schwarz), NICHT --level1-grau, auch
   nicht mehr übergangsweise am Anfang: .level1-ebene--hinten (mit dem
   sichtbaren Boden) hat bei "eingefahren" bereits das Sichtfenster
   verlassen, bevor diese Fläche selbst hier oben sichtbar wird (Track
   180-195vh) - ein Grauton hier läuft dadurch als eigener, unbegleiteter
   grauer Streifen quer über den Bildschirm, statt (wie ursprünglich
   angenommen) neben dem noch sichtbaren, ebenfalls grauen Boden zu stehen.
   Bewusst --level2-hoehle-bg statt --sky-black (NICHT dieselbe Farbe,
   siehe css/himmel.css) - so liegt an der Nahtstelle bei 200vh exakt
   dieselbe Farbe wie Level 2s eigener Hintergrund an, kein Sprung. Ab dort
   (200-280vh) liegt ohnehin Level 2s eigene, deckende Szene (höherer
   z-index) darüber - die Farbe spielt dort keine Rolle mehr. */
.level1-hinten-untergrund {
    position: absolute;
    left: 0;
    width: 100%;
    top: 100%;
    height: calc(100 * var(--uh));
    background: var(--level2-hoehle-bg);
}

.level1-ebene--vorne {
    position: absolute;
    inset: 0;
    z-index: 3;
}

.level1-boden {
    position: absolute;
    left: 0;
    width: 100%;
    aspect-ratio: 1200 / 235;
    display: block;
    /* Nachbesserung: fehlte hier (im Gegensatz zu .level1-grabsteine/
       .level1-baeume, die es schon hatten) - ein normales <img> (siehe
       .level1-boden--vorne) fängt Klicks über seine GESAMTE Bounding-Box
       ab, auch über transparenten Bildbereichen. Seit hinten-Zombies (Paket
       3, Nachbesserung) im DOM vor diesem Element liegen, damit sie
       sichtbar dahinter laufen, blockierte .level1-boden--vorne dadurch
       Klicks auf sie komplett. */
    pointer-events: none;
}

/* Grau statt der schwarzen Original-Füllung - mask-image nutzt die SVG-
   Silhouette, background-color liefert die tatsächliche, theme-abhängige
   Farbe (siehe --level1-grau in css/variables.css - drei verbindliche
   Hex-Werte, einer je Theme). Bewusst NICHT per filter:grayscale auf einem
   <img>, weil das Original-SVG schon reines Schwarz ist und ein Filter
   daran nichts mehr aufzuhellen hätte - mask+background-color kann dagegen
   jede Farbe liefern, unabhängig vom Ausgangsbild. Sitzt an der Unterkante
   von .level1-ebene--hinten - dessen bottom-Wert bestimmt die Position. */
.level1-boden--hinten {
    bottom: 0;
    background-color: var(--level1-grau);
    transition: background-color var(--theme-transition);
    -webkit-mask-image: url('../../sh/img/level1/Boden02.svg');
    mask-image: url('../../sh/img/level1/Boden02.svg');
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}

/* Vorne bleibt schwarz = Original-Füllung - normales <img>, kein mask
   nötig (siehe index.html). Ebene 4 selbst bleibt in #scene-level1 (siehe
   .level1-ebene--vorne oben) - nur die hintere Ebene hatte das
   Clipping-/Parallax-Problem, die vordere Ebene funktioniert bereits
   korrekt. */
.level1-boden--vorne {
    bottom: 16%;
}

.level1-grabsteine,
.level1-baeume {
    position: absolute;
    inset: 0;
    pointer-events: none;
}

/* Hintere Container bekommen exakt dieselbe Bezugsbox wie .level1-boden
   --hinten (gleiche Breite, gleiches aspect-ratio, gleiche Unterkante) statt
   des geerbten inset:0 (das über die volle Höhe von .level1-ebene--hinten
   ginge, unabhängig vom tatsächlich gerenderten Boden). Dadurch entspricht
   ein "bottom"-Prozentwert am Kind-Element exakt derselben Höhe auf der
   welligen Bodenlinie von Boden02.svg - siehe BODEN_KANTE/bodenKantenHoehe
   in js/level1-szene.js, das genau diese Prozentwerte pro Position
   berechnet. */
.level1-grabsteine--hinten,
.level1-baeume--hinten {
    top: auto;
    right: 0;
    bottom: 0;
    left: 0;
    width: 100%;
    aspect-ratio: 1200 / 235;
}

/* Vordere Container bekommen aus demselben Grund exakt dieselbe Bezugsbox
   wie .level1-boden--vorne (Boden01.svg, bottom:16%, aspect-ratio
   1200/235) statt des geerbten inset:0 - siehe BODEN01_KANTE/
   bodenKantenHoeheVorne in js/level1-szene.js. Vorher saßen Grabsteine/
   Bäume hier auf einem festen bottom:30% der ganzen 100vh-Szene, komplett
   unabhängig von der (wannenförmigen: an den Rändern hoch, in der Mitte
   tief) Kurve von Boden01.svg - dadurch steckten sie an den hohen
   Rand-Stellen der Kurve tief im schwarzen Boden. */
.level1-grabsteine--vorne,
.level1-baeume--vorne {
    top: auto;
    right: 0;
    bottom: 16%;
    left: 0;
    width: 100%;
    aspect-ratio: 1200 / 235;
}

.level1-grabstein,
.level1-baum {
    position: absolute;
    /* left/width/bottom/transform kommen pro Instanz von
       js/level1-szene.js (feste Position, zufällige Asset-Auswahl+Neigung,
       bottom passend zur Bodenkante an dieser x-Position). */
}

/* Hintere Ebene: grau via mask-image (Elemente sind <div>s, siehe
   js/level1-szene.js), etwas kleiner/gedämpfter - wirkt dadurch weiter
   entfernt. */
.level1-grabsteine--hinten .level1-grabstein,
.level1-baeume--hinten .level1-baum {
    background-color: var(--level1-grau);
    transition: background-color var(--theme-transition);
    -webkit-mask-size: contain;
    mask-size: contain;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    -webkit-mask-position: bottom center;
    mask-position: bottom center;
    opacity: 0.85;
    /* Rotation (nur Grabsteine, siehe js/level1-szene.js) dreht sich um die
       Unterkante statt die Elementmitte - wirkt dadurch wie ein Stein, der
       an seinem Fuß im Boden steckt und nach oben wegkippt, statt sich "in
       der Luft" um seinen Mittelpunkt zu drehen. Verankerungspunkt bleibt
       so bei jeder Neigung exakt derselbe. */
    transform-origin: bottom center;
}

/* Vordere Ebene: <img>-Tags, bleiben schwarz wie die Original-SVGs. bottom
   kommt jetzt pro Instanz von js/level1-szene.js (bodenKantenHoeheVorne,
   passend zur Kurve von Boden01.svg statt eines pauschalen Werts).
   transform-origin wie bei der hinteren Ebene: Rotation kippt um den
   Fußpunkt, damit der Verankerungspunkt bei jeder Neigung exakt bleibt. */
.level1-grabsteine--vorne .level1-grabstein,
.level1-baeume--vorne .level1-baum {
    display: block;
    transform-origin: bottom center;
}

/* ===== Zombiehände ===== */
/* Bugfix (schwebende Hände bei schmalem Fenster): Bezugsbox war vorher
   inset:0 - relativ zur GANZEN Szene (100vh, unabhängig von der
   Fensterbreite). .level1-boden--vorne wird bei schmalem Fenster aber
   flacher (feste aspect-ratio, width:100%) - die Hände blieben auf ihrer
   festen Scene-Höhe stehen, während der Boden darunter schrumpfte, und
   schwebten dadurch zunehmend über ihm. Jetzt dieselbe Bezugsbox wie
   .level1-boden--vorne/.level1-grabsteine--vorne/.level1-baeume--vorne
   (bottom:16%, aspect-ratio 1200/235) - skaliert automatisch mit der
   tatsächlichen Bodenhöhe mit, exakt wie bei den Bäumen/Grabsteinen. */
.level1-haende {
    position: absolute;
    left: 0;
    bottom: 16%;
    width: 100%;
    aspect-ratio: 1200 / 235;
    pointer-events: none;
}

/* Erlöste Seelen (Level 3, Soulkeeper besiegt): Zombiehände bleiben
   verborgen, während die Kamera zurück durch die Oberwelt fährt (siehe
   js/level3-outro.js: starte()/beende()) - blenden erst wieder ein, wenn
   der Abspann fertig durchgelaufen oder übersprungen wurde. */
.level1-haende--versteckt {
    display: none;
}

/* bottom:27% statt der rohen Bodenkanten-Höhe (~30-32% an dieser Stelle,
   siehe BODEN01_KANTE in js/level1-szene.js) - ein kleiner Sicherheits-
   abstand unter die Kurve, in derselben Art wie bei den JS-platzierten
   Grabsteinen/Bäumen (dort SICHERHEITS_ABSTAND unter der Kurve), nur hier
   direkt als CSS-Wert, weil die Hände statische HTML-Elemente sind. Ohne
   diesen Abstand sitzt der Handrücken praktisch genau auf der Kurve statt
   ein Stück im Boden zu stecken und wirkt dadurch leicht darüber
   schwebend. Bewusst nur ein kleiner Abzug (3-5 Punkte) statt eines
   großen: die Hand-Grafik füllt ihre Vorlage fast vollständig aus (kaum
   Leerraum am unteren Rand), ein größerer Abzug würde sichtbar
   Handballen/Handgelenk im Boden versenken statt nur die Grundlinie
   sauber zu schließen. */
.level1-hand {
    position: absolute;
    bottom: 27%;
    width: calc(56px * var(--stage-scale));
}

.level1-hand--links {
    left: 46.5%;
    transform: rotate(-4deg);
}

.level1-hand--rechts {
    left: 49.5%;
    transform: rotate(5deg);
}

/* ===== Spielbereich ===== */
/* Bewusst unsichtbar (keine Border/Background) - reiner Anker-Container
   für spätere Ausbaustufen (Gegner, Schussmechanik, Spieler-Animationen),
   damit künftiges Gameplay hier andocken kann, ohne die Parallax-Ebenen
   selbst anzufassen. Grenzen halten die Mitte der Szene frei von
   Grabsteinen/Bäumen (siehe Positionslisten in js/level1-szene.js). */
.level1-spielbereich {
    position: absolute;
    left: 28%;
    right: 28%;
    bottom: 0;
    top: 35%;
    /* Nachbesserung: seit Paket 3 gibt es drei übereinanderliegende
       Instanzen dieser Klasse (hinten/mitte-vorne/nah, siehe index.html
       und js/level1-gameplay.js: containerFuerTiefe) - als leere, aber
       positionierte Boxen fingen sie standardmäßig (pointer-events:auto)
       JEDE Klick-Koordinate in ihrem Bereich ab, auch dort, wo gerade keine
       Kreatur drin war. Der jeweils vordere Container blockierte dadurch
       systematisch Klicks auf Kreaturen in den Ebenen dahinter. Container
       selbst jetzt "klick-transparent" - .l1-feind-hitbox/die SVG-Pfade der
       Kreaturen setzen pointer-events pro Element wieder gezielt auf
       auto/visiblePainted (siehe css/level1-gameplay.css), bleiben also
       weiterhin klickbar. */
    pointer-events: none;
}

/* ===== Ebene 5: Kamera-Ebene (Äste, Tiefenunschärfe) ===== */
/* Liegt vor ALLEM anderen (auch vor dem Mond) - dürfen laut Vorgabe über
   den Mondbereich laufen. Leichte Unschärfe simuliert eine sehr kamera-
   nahe Tiefenschärfe-Ebene, der Fokus soll nicht auf den Ästen liegen.
   z-index:4 ist bereits der höchste Wert innerhalb von #scene-level1 (die
   Sektion selbst ist per .scene z-index:1, damit schon vor Himmel/Mond/
   hinterer Ebene, die alle z-index:0 haben) - das Stacking war also nie
   das Problem. Der Grund, warum Äste "in den Farbverlauf rutschten": jede
   .scene hat overflow:hidden (siehe css/base.css) und hat den nach oben
   über den Szenenrand hinausragenden Teil (top:-X%) hart abgeschnitten.
   #scene-level1 bekommt daher hier gezielt overflow:visible - #story
   (der äußere Rahmen, siehe css/base.css) schneidet als letzte
   Sicherheitsgrenze weiterhin am Viewport-Rand ab, es gibt also kein
   Scrollbar-Risiko. */
#scene-level1 {
    overflow: visible;
}

/* Startet deutlich tiefer (translateY nach unten verschoben) und fährt
   beim Übergang Himmel→Level 1 gemeinsam mit Mond/hinterer Ebene in ihre
   Zielposition hoch (.level1-kamera-ebene--eingefahren, ausgelöst
   zeitgleich mit .story-track--level1 - siehe js/main.js/js/levelkarte.js).
   Vorher stand hier gar kein transform/transition - die Äste hingen fest
   an ihrer Endposition, ohne die für ganz kameranahe Elemente erwartete,
   auffällige Bewegung "von unten heran". Ein einzelnes transform auf dem
   Container bewegt links+rechts gemeinsam, ohne dass .level1-ast--links/
   --rechts ihre unterschiedlichen top-Werte (siehe unten) einzeln
   animieren müssten. */
.level1-kamera-ebene {
    position: absolute;
    inset: 0;
    z-index: 4;
    pointer-events: none;
    transform: translateY(calc(42 * var(--uh)));
    transition: transform 4s cubic-bezier(0.65, 0, 0.35, 1);
}

.level1-kamera-ebene--eingefahren {
    transform: translateY(0);
}

.level1-ast {
    position: absolute;
    width: min(calc(40 * var(--uw)), 560px);
    filter: blur(2.5px) brightness(0.75);
}

/* -4% (alter Wert) lag lokal betrachtet SPÄTER/tiefer als die Mond-
   Zielposition (top:88vh auf #story-track bezogen entspricht umgerechnet
   auf die 100vh-lokale Höhe von #scene-level1 ca. top:-12%) - der Ast
   hing also unterhalb des Mondbereichs statt darüber. Eigene, größere
   Breite (statt der geteilten .level1-ast-Breite) und noch weiter oben,
   damit er deutlich weiter ins Bild ragt. */
.level1-ast--links {
    left: -8%;
    top: -45%;
    width: min(calc(50 * var(--uw)), 680px);
}

/* Ast02.svg ist (Pixel-Analyse bestätigt: Ansatzpunkt oben im
   Original-Bild liegt bei ca. 29% von links, nicht gespiegelt) bereits
   korrekt seitenverkehrt zu Ast01.svg gezeichnet - das zusätzliche
   scaleX(-1) hat das wieder umgedreht und den Ast dadurch falsch herum
   aussehen lassen. Kein Fehler in der SVG-Datei selbst, nur in dieser
   Regel - deshalb hier entfernt statt die Datei anzupassen. Deutlich
   höher (-32%) als der linke Ast, damit er klar über der Mond-Position
   (~-12% lokal) liegt. */
.level1-ast--rechts {
    right: -8%;
    top: -32%;
}

@media (max-width: 560px) {
    .level1-mond {
        right: 6%;
        /* Auf dem Handy bewusst zurückhaltender gewachsen als auf dem
           Desktop (nicht die vollen 1,5-2x) - sonst wird der Mond auf
           schmalen Screens unverhältnismäßig groß. */
        width: min(calc(30 * var(--uw)), 190px);
    }

    .level1-spielbereich,
    .level1-spielbereich-hexenfern {
        left: 12%;
        right: 12%;
    }
}
