/* =====================================================================
   Quiznight 2 — die Pro-Monster: Glanz, Ruhe-Schleifen, Signaturzüge.
   Gehört zu monster/pro-figuren.js (Entwürfe zum Ansehen).

   REGELN (design/handy/monster/LEISTUNG.md): Bewegt werden nur transform
   und opacity ganzer Ebenen (.qmp-e, .qmp-leben und die Kinder eines
   maskierten Stoffs); keine Filter, keine bewegten Verläufe. Ohne Bewegung
   (prefers-reduced-motion oder .qmp-still) steht jede Ebene in einem
   Zustand, der den Stoff zeigt: Der Glanz bleibt als Standbild.

   AUFBAU: erst je Figur ihre Ruhe-Schleife, ihre Posen, ihr Signaturzug
   (.qmp-zug) — dann, am Ende der Datei, DIE SHOW: je Figur ihr Auftritt und
   ihr Jubel als Choreografie des ganzen Körpers ([data-akt], gespielt von
   QN.monsterProSpiel).
   ===================================================================== */
.qmp { position: relative; display: inline-block; vertical-align: top; }
.qmp-e { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; display: block; pointer-events: none; }
.qmp-akt, .qmp-lage, .qmp-leben { position: absolute; inset: 0; display: block; }
.qmp-stoff { -webkit-mask-size: 100% 100%; mask-size: 100% 100%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; overflow: hidden; }
.qmp-stoff > * { position: absolute; display: block; }

/* Der Hof liegt am Umriss an und atmet. Es gibt ihn hell (für dunklen Grund, die Vorgabe) und satt-dunkel
   (für hellen Grund). Der Ort sagt, was gilt: ein Vorfahr mit .qmp-auf-hell oder .qmp-auf-dunkel. */
.qmp-auf-hell { --qmp-hh: none; --qmp-hd: inline; }
.qmp-auf-dunkel { --qmp-hh: inline; --qmp-hd: none; }
.qmp-hh { display: var(--qmp-hh, inline); }
.qmp-hd { display: var(--qmp-hd, none); }
.qmp-hof { animation: qmp-hof 3s ease-in-out infinite; }
@keyframes qmp-hof { 0%, 100% { opacity: .72; } 50% { opacity: 1; } }

/* ---------------- SCHNURRI · die Katze (Schleife 8 s) ----------------
   Dauernd: der Schweif schwingt weit (drei Glieder, jedes folgt dem vorigen 0,22 s später), Atmen,
   Lichtstreifen im Fell. Der Reihe nach (nur in Ruhe): Ohr zuckt (0,5 s) · langsames Blinzeln (1,2 s) ·
   Milchtritt (2,2 s) · PUTZEN (3,8–6,7 s: Pfote hoch, dreimal lecken, einmal über die Wange) · das andere
   Ohr (6,9 s). Jede Bewegung mit Vor- und Nachschwung, nichts Lineares.
   LEISTUNG: 14 Animationen je Katze (vorher 23). Still sind jetzt: Hof, Schnurrhaare, Marke, das Glimmen
   der Augen, das Wiegen des Rumpfs — alles, was bei 110 px nicht zu sehen war. */
.qmp-katze .qmp-leben { animation: qmp-katze-atem 4s cubic-bezier(.45, 0, .55, 1) infinite; }
@keyframes qmp-katze-atem { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(1.018, .984); } }
.qmp-katze-s1 { animation: qmp-katze-s1 2s cubic-bezier(.45, 0, .55, 1) infinite; }
.qmp-katze-s2 { animation: qmp-katze-s2 2s cubic-bezier(.45, 0, .55, 1) -1.78s infinite; }
.qmp-katze-s3 { animation: qmp-katze-s3 2s cubic-bezier(.45, 0, .55, 1) -1.56s infinite; }
@keyframes qmp-katze-s1 { 0%, 100% { transform: rotate(-7deg); } 50% { transform: rotate(16deg); } }
@keyframes qmp-katze-s2 { 0%, 100% { transform: rotate(-16deg); } 50% { transform: rotate(18deg); } }
@keyframes qmp-katze-s3 { 0%, 100% { transform: rotate(-24deg); } 50% { transform: rotate(26deg); } }
.qmp-katze-seide { left: -50%; top: -10%; width: 34%; height: 120%; transform: translateX(210%) skewX(-18deg); animation: qmp-katze-seide 4s cubic-bezier(.45, 0, .55, 1) -1s infinite; }
@keyframes qmp-katze-seide { 0% { transform: translateX(0) skewX(-18deg); } 40%, 100% { transform: translateX(480%) skewX(-18deg); } }

/* Ruhewerte (gelten auch ohne Bewegung): Augen offen, keine Zunge, keine Putzpfote */
.qmp-katze-lid { transform: translateY(-104%); }
.qmp-katze-lid-halb { transform: translateY(-60%); }
.qmp-katze-gross, .qmp-katze-zunge { opacity: 0; }
.qmp-katze-putz { opacity: 0; transform: translateY(7%) scale(.7, .25); }

/* --- die Ereignisse der Ruhe-Schleife --- */
.qmp-katze[data-pose="ruhe"] .qmp-katze-ol { animation: qmp-katze-ohr-l 8s cubic-bezier(.3, .6, .3, 1) infinite; }
@keyframes qmp-katze-ohr-l { 0%, 6% { transform: none; } 8% { transform: rotate(-19deg) scale(1, .9); } 10% { transform: rotate(5deg); } 12% { transform: rotate(-10deg); } 14.5%, 100% { transform: none; } }
.qmp-katze[data-pose="ruhe"] .qmp-katze-or { animation: qmp-katze-ohr-r 8s cubic-bezier(.3, .6, .3, 1) infinite; }
@keyframes qmp-katze-ohr-r { 0%, 68% { transform: none; } 70.5% { transform: rotate(34deg) scale(1, .76); } 73% { transform: rotate(16deg); } 75.5% { transform: rotate(34deg) scale(1, .76); } 78.5%, 86% { transform: none; }
  88% { transform: rotate(18deg) scale(1, .9); } 90% { transform: rotate(-5deg); } 92% { transform: rotate(9deg); } 94.5%, 100% { transform: none; } }
/* das Lid gleitet bis zwei Drittel, dann wird auf den Bogen geschnitten (der liegt unter den offenen Augen) */
.qmp-katze[data-pose="ruhe"] .qmp-katze-lid { animation: qmp-katze-lid 8s cubic-bezier(.4, 0, .3, 1) infinite; }
@keyframes qmp-katze-lid { 0%, 15% { transform: translateY(-104%); } 17.9%, 22.1% { transform: translateY(-34%); } 25%, 47.5% { transform: translateY(-104%); } 49.9%, 79.1% { transform: translateY(-34%); } 82%, 100% { transform: translateY(-104%); } }
.qmp-katze[data-pose="ruhe"] .qmp-katze-auf { animation: qmp-katze-auf 8s linear infinite; }
@keyframes qmp-katze-auf { 0%, 17.9% { opacity: 1; } 18%, 22% { opacity: 0; } 22.1%, 49.9% { opacity: 1; } 50%, 79% { opacity: 0; } 79.1%, 100% { opacity: 1; } }
/* Milchtritt: links, rechts, links, rechts — die Pfote hebt sich hoch und drückt weich auf */
.qmp-katze[data-pose="ruhe"] .qmp-katze-pl { animation: qmp-katze-tritt-l 8s cubic-bezier(.3, .6, .3, 1) infinite; }
@keyframes qmp-katze-tritt-l { 0%, 27.5% { transform: none; } 29.4% { transform: translateY(-7%) rotate(-12deg); } 31% { transform: translateY(.8%) scale(1.2, .78); } 32.4%, 36% { transform: none; }
  37.9% { transform: translateY(-7%) rotate(-12deg); } 39.5% { transform: translateY(.8%) scale(1.2, .78); } 40.9%, 100% { transform: none; } }
.qmp-katze[data-pose="ruhe"] .qmp-katze-pr { animation: qmp-katze-tritt-r 8s cubic-bezier(.3, .6, .3, 1) infinite; }
@keyframes qmp-katze-tritt-r { 0%, 31.7% { transform: none; opacity: 1; } 33.6% { transform: translateY(-7%) rotate(12deg); } 35.2% { transform: translateY(.8%) scale(1.2, .78); } 36.6%, 40.2% { transform: none; }
  42.1% { transform: translateY(-7%) rotate(12deg); } 43.7% { transform: translateY(.8%) scale(1.2, .78); } 45.1% { transform: none; opacity: 1; } 47.9% { opacity: 1; } 48%, 82.4% { opacity: 0; } 82.5%, 100% { transform: none; opacity: 1; } }
/* der Kopf: wiegt beim Milchtritt mit, senkt sich zur Pfote (dreimal lecken), schmiegt sich in die Pfote */
.qmp-katze[data-pose="ruhe"] .qmp-katze-kopf { animation: qmp-katze-kopf 8s cubic-bezier(.45, 0, .55, 1) infinite; }
@keyframes qmp-katze-kopf { 0%, 27.5% { transform: none; }
  30% { transform: translateY(1%) rotate(-3.5deg); } 34.3% { transform: translateY(1%) rotate(3.5deg); } 38.5% { transform: translateY(1%) rotate(-3.5deg); } 42.8% { transform: translateY(1%) rotate(3.5deg); } 45.5%, 47.5% { transform: none; }
  51.5% { transform: translateY(2.6%) rotate(-7deg); } 54.5% { transform: translateY(5.4%) rotate(-11deg); } 57% { transform: translateY(2.6%) rotate(-6deg); } 59.5% { transform: translateY(5.4%) rotate(-11deg); }
  62% { transform: translateY(2.6%) rotate(-6deg); } 64.5% { transform: translateY(5.4%) rotate(-11deg); } 67% { transform: translateY(2%) rotate(-4deg); }
  70.5% { transform: translateY(1.8%) rotate(9deg); } 73% { transform: translateY(1.8%) rotate(4deg); } 75.5% { transform: translateY(1.8%) rotate(9deg); } 78.5% { transform: translateY(1%) rotate(3deg); } 83%, 100% { transform: none; } }
.qmp-katze[data-pose="ruhe"] .qmp-katze-zunge { animation: qmp-katze-zunge 8s linear infinite; }
@keyframes qmp-katze-zunge { 0%, 53% { opacity: 0; } 53.4%, 56% { opacity: 1; } 56.4%, 58% { opacity: 0; } 58.4%, 61% { opacity: 1; } 61.4%, 63% { opacity: 0; } 63.4%, 66% { opacity: 1; } 66.4%, 100% { opacity: 0; } }
.qmp-katze[data-pose="ruhe"] .qmp-katze-putz { animation: qmp-katze-putz 8s cubic-bezier(.45, 0, .55, 1) infinite; }
@keyframes qmp-katze-putz { 0%, 47.5% { opacity: 0; transform: translateY(7%) scale(.7, .25); } 48% { opacity: 1; transform: translateY(7%) scale(.7, .25); } 51.5% { opacity: 1; transform: none; }
  54.5% { transform: translateY(-2%); } 57% { transform: none; } 59.5% { transform: translateY(-2%); } 62% { transform: none; } 64.5% { transform: translateY(-2%); } 67% { transform: none; }
  70.5% { transform: rotate(26deg) scale(1, 1.36); } 73% { transform: rotate(16deg) scale(1, 1.2); } 75.5% { transform: rotate(26deg) scale(1, 1.36); } 78.5% { opacity: 1; transform: rotate(8deg) scale(1, 1.08); }
  82.4% { opacity: 1; transform: translateY(7%) scale(.7, .25); } 82.5%, 100% { opacity: 0; transform: translateY(7%) scale(.7, .25); } }

/* Freude: der Schweif steht und zittert an der Spitze · Ärger: er peitscht · Gruß: die Pfote winkt */
.qmp-katze[data-pose="freude"] .qmp-katze-s1 { animation: none; transform: rotate(8deg); }
.qmp-katze[data-pose="freude"] .qmp-katze-s2 { animation: qmp-katze-zittern .5s ease-in-out infinite alternate; }
.qmp-katze[data-pose="freude"] .qmp-katze-s3 { animation: qmp-katze-zittern .26s ease-in-out infinite alternate; }
@keyframes qmp-katze-zittern { from { transform: rotate(6deg); } to { transform: rotate(16deg); } }
.qmp-katze[data-pose="aerger"] .qmp-katze-s1, .qmp-katze[data-pose="aerger"] .qmp-katze-s2, .qmp-katze[data-pose="aerger"] .qmp-katze-s3 { animation-duration: .6s; }
.qmp-katze[data-pose="aerger"] .qmp-katze-s2 { animation-delay: -.54s; }
.qmp-katze[data-pose="aerger"] .qmp-katze-s3 { animation-delay: -.48s; }
.qmp-katze-winken { animation: qmp-katze-winken .7s cubic-bezier(.45, 0, .55, 1) infinite alternate; }
@keyframes qmp-katze-winken { from { transform: rotate(-12deg); } to { transform: rotate(14deg); } }

/* Signaturzug (2 s): das Sprung-Wackeln — Kopf tief, Ohren angelegt, Hintern mit den Keulen hoch, Pupillen riesig,
   drei Wackler, dann der Satz */
.qmp-katze.qmp-zug .qmp-katze-putz, .qmp-katze.qmp-zug .qmp-katze-zunge, .qmp-katze.qmp-zug .qmp-katze-lid, .qmp-katze.qmp-zug .qmp-katze-auf,
.qmp-katze.qmp-zug .qmp-katze-pl, .qmp-katze.qmp-zug .qmp-katze-pr { animation: none; }
.qmp-katze.qmp-zug .qmp-leben { animation: qmp-katze-satz 2s cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-satz { 0%, 58% { transform: none; } 64% { transform: scale(1.08, .9); } 76% { transform: translateY(-12%) scale(.94, 1.1); } 84% { transform: translateY(-8%) scale(.98, 1.04); } 93% { transform: scale(1.1, .88); } 100% { transform: none; } }
.qmp-katze.qmp-zug .qmp-katze-kopf { animation: qmp-katze-ducken 2s cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-ducken { 0% { transform: none; } 10% { transform: translateY(11%) scale(1.04, .95); } 20% { transform: translate(1.4%, 11%) rotate(3deg) scale(1.04, .95); } 30% { transform: translate(-1.4%, 11%) rotate(-3deg) scale(1.04, .95); }
  40% { transform: translate(1.4%, 11%) rotate(3deg) scale(1.04, .95); } 50% { transform: translate(-1.4%, 11%) rotate(-3deg) scale(1.04, .95); } 58% { transform: translateY(11.6%) scale(1.05, .94); } 66%, 100% { transform: none; } }
.qmp-katze.qmp-zug .qmp-katze-rumpf { animation: qmp-katze-heck 2s cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-heck { 0% { transform: none; } 10% { transform: translateY(-36%) scale(1.42, 1.3); } 20% { transform: translate(-10%, -36%) rotate(-13deg) scale(1.42, 1.3); } 30% { transform: translate(10%, -36%) rotate(13deg) scale(1.42, 1.3); }
  40% { transform: translate(-10%, -36%) rotate(-13deg) scale(1.42, 1.3); } 50% { transform: translate(10%, -36%) rotate(13deg) scale(1.42, 1.3); } 58% { transform: translateY(-34%) scale(1.42, 1.3); } 66%, 100% { transform: none; } }
.qmp-katze.qmp-zug .qmp-katze-schweif { animation: qmp-katze-heckschweif 2s cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-heckschweif { 0% { transform: none; } 10% { transform: translate(9%, -44%) rotate(62deg); } 20% { transform: translate(-1%, -44%) rotate(46deg); } 30% { transform: translate(19%, -44%) rotate(78deg); }
  40% { transform: translate(-1%, -44%) rotate(46deg); } 50% { transform: translate(19%, -44%) rotate(78deg); } 58% { transform: translate(9%, -42%) rotate(62deg); } 66%, 100% { transform: none; } }
/* die Ohren legen sich an: seitlich flach an den Kopf, kürzer */
.qmp-katze.qmp-zug .qmp-katze-ol { animation: qmp-katze-flach-l 2s cubic-bezier(.4, 0, .3, 1) 1 both; }
.qmp-katze.qmp-zug .qmp-katze-or { animation: qmp-katze-flach-r 2s cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-flach-l { 0%, 66%, 100% { transform: none; } 10%, 58% { transform: translate(-2.5%, 9%) rotate(-62deg) scale(1, .74); } }
@keyframes qmp-katze-flach-r { 0%, 66%, 100% { transform: none; } 10%, 58% { transform: translate(2.5%, 9%) rotate(62deg) scale(1, .74); } }
.qmp-katze.qmp-zug .qmp-katze-gross { animation: qmp-katze-gross 2s linear 1 both; }
@keyframes qmp-katze-gross { 0%, 4% { opacity: 0; } 8%, 88% { opacity: 1; } 96%, 100% { opacity: 0; } }
.qmp-katze.qmp-zug .qmp-katze-s1, .qmp-katze.qmp-zug .qmp-katze-s2, .qmp-katze.qmp-zug .qmp-katze-s3 { animation-duration: .4s; }

/* ---------------- FUNKEL · Nachthimmel (Schleife 5 s) ---------------- */
.qmp-funkel .qmp-leben { animation: qmp-funkel-schaukel 5s ease-in-out infinite; }
@keyframes qmp-funkel-schaukel { 0%, 100% { transform: rotate(-2.6deg); } 50% { transform: rotate(2.6deg); } }
.qmp-funkel-sterne, .qmp-funkel-hell { left: 0; top: 0; width: 200%; height: 100%; animation: qmp-funkel-ziehen 5s linear infinite; }
.qmp-funkel-hell { opacity: 0; animation: none; }   /* zieht nur mit, wenn sie zu sehen ist (Freude, Signaturzug) */
@keyframes qmp-funkel-ziehen { from { transform: translateX(0); } to { transform: translateX(-25%); } }
.qmp-funkel-nebel { inset: 0; opacity: .8; animation: qmp-funkel-nebel 5s ease-in-out infinite;
  background: radial-gradient(60% 34% at 40% 30%, rgba(150, 120, 255, .6), transparent 72%), radial-gradient(52% 30% at 62% 76%, rgba(255, 120, 215, .4), transparent 72%), radial-gradient(40% 26% at 26% 62%, rgba(90, 200, 255, .3), transparent 72%); }
@keyframes qmp-funkel-nebel { 0%, 100% { opacity: .55; } 50% { opacity: 1; } }
/* die Sternschnuppe: ein Keil — spitzer Schweif, runder heller Kopf —, schräg von oben links nach unten rechts */
.qmp-funkel-schnuppe { left: 0; top: 0; width: 46%; height: 8%; opacity: 0; transform: translate(-60%, 380%) rotate(21deg);
  clip-path: polygon(0 50%, 80% 12%, 92% 0, 100% 28%, 100% 72%, 92% 100%, 80% 88%);
  background: linear-gradient(90deg, rgba(190, 180, 255, 0) 0%, rgba(214, 205, 255, .75) 50%, #fff 84%); }
.qmp-funkel-bild { animation: qmp-funkel-bild1 5s ease-in-out infinite; }
.qmp-funkel-b2 { animation-name: qmp-funkel-bild2; }
.qmp-funkel-b3 { animation-name: qmp-funkel-bild3; }
@keyframes qmp-funkel-bild1 { 0%, 4% { opacity: 0; } 12%, 80% { opacity: 1; } 92%, 100% { opacity: 0; } }
@keyframes qmp-funkel-bild2 { 0%, 20% { opacity: 0; } 28%, 80% { opacity: 1; } 92%, 100% { opacity: 0; } }
@keyframes qmp-funkel-bild3 { 0%, 36% { opacity: 0; } 46%, 80% { opacity: 1; } 92%, 100% { opacity: 0; } }
.qmp-funkel[data-pose="freude"] .qmp-funkel-hell { opacity: .95; animation: qmp-funkel-ziehen 5s linear infinite; }
.qmp-funkel[data-pose="aerger"] .qmp-funkel-sterne { opacity: .22; }
.qmp-funkel[data-pose="aerger"] .qmp-funkel-bild, .qmp-funkel[data-pose="aerger"] .qmp-funkel-nebel { opacity: 0; animation: none; }
/* Signaturzug: Sternschnuppe durch die Haut, die Wiege schwingt weit */
.qmp-funkel.qmp-zug .qmp-leben { animation: qmp-funkel-schwung 1.6s cubic-bezier(.3, .1, .3, 1) 1 both; }
@keyframes qmp-funkel-schwung { 0% { transform: rotate(0); } 22% { transform: rotate(-12deg); } 50% { transform: rotate(10deg); } 76% { transform: rotate(-4deg); } 100% { transform: rotate(0); } }
.qmp-funkel.qmp-zug .qmp-funkel-schnuppe { animation: qmp-funkel-schnuppe 1.1s .2s linear 1 both; }
@keyframes qmp-funkel-schnuppe { 0% { opacity: 0; transform: translate(-60%, 380%) rotate(21deg); } 8%, 88% { opacity: 1; } 100% { opacity: 0; transform: translate(170%, 890%) rotate(21deg); } }
.qmp-funkel.qmp-zug .qmp-funkel-hell { animation: qmp-funkel-ziehen 5s linear infinite, qmp-funkel-auf 1.6s ease-out 1 both; }
@keyframes qmp-funkel-auf { 0%, 100% { opacity: 0; } 35%, 70% { opacity: 1; } }

/* ---------------- PRISMA · Kristall (Schleife 4 s) ---------------- */
.qmp-prisma .qmp-hof { animation: none; }
.qmp-prisma .qmp-leben { animation: qmp-prisma-schweben 4s ease-in-out infinite; }
@keyframes qmp-prisma-schweben { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-1.6%); } }
.qmp-prisma-regen { left: -60%; top: -20%; width: 58%; height: 140%; transform: translateX(150%) skewX(-14deg); animation: qmp-prisma-regen 4s ease-in-out infinite;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 110, 200, .7) 20%, rgba(255, 240, 170, .65) 38%, rgba(110, 255, 200, .65) 56%, rgba(110, 160, 255, .7) 76%, rgba(190, 120, 255, .6) 90%, rgba(255, 255, 255, 0) 100%); }
@keyframes qmp-prisma-regen { 0% { transform: translateX(0) skewX(-14deg); } 62%, 100% { transform: translateX(290%) skewX(-14deg); } }
.qmp-prisma-weiss { inset: 0; background: #fff; opacity: 0; }
.qmp-prisma-saum2 { opacity: 0; animation: qmp-prisma-saum 4s ease-in-out infinite; }
@keyframes qmp-prisma-saum { 0%, 100% { opacity: 0; } 50% { opacity: 1; } }
.qmp-prisma-blitz { opacity: 0; animation: qmp-prisma-blitz 4s linear infinite; }
.qmp-prisma-f1 { opacity: .45; }
.qmp-prisma-f2 { animation-delay: .5s; }
.qmp-prisma-f3 { animation-delay: 2s; }
.qmp-prisma-f4 { animation-delay: 1.5s; }
@keyframes qmp-prisma-blitz { 0% { opacity: 0; } 5% { opacity: .9; } 16%, 100% { opacity: 0; } }
.qmp-prisma-funke { animation: qmp-prisma-funke 2s ease-in-out infinite; }
.qmp-prisma-g2 { animation-delay: -1s; }
@keyframes qmp-prisma-funke { 0%, 100% { transform: scale(.35) rotate(0deg); opacity: .5; } 50% { transform: scale(1.25) rotate(45deg); opacity: 1; } }
/* Signaturzug: einmal um die eigene Achse — IN DER TIEFE (der Stein bleibt ein Stein: Das Gesicht wandert über ihn, die Zacken laufen um die Achse; die Bilder
   „eine Drehung" stehen unten bei „DIE SHOW · PRISMA") —, alle Facetten blitzen, der Regenbogen fegt durch. Vorher klappte die Figur in der Fläche um. */
.qmp-prisma.qmp-zug .qmp-leben { animation: qmp-prisma-drehen 1.4s cubic-bezier(.4, 0, .2, 1) 1 both; }
@keyframes qmp-prisma-drehen { 0% { transform: scale(1, 1); } 12% { transform: scale(1.05, .95); } 26% { transform: translateY(-3%) scale(.86, 1.05); } 40% { transform: translateY(-3%) scale(1, 1.03); } 54% { transform: translateY(-2%) scale(.86, 1.05); } 68% { transform: scale(1.06, .96); } 82% { transform: scale(.98, 1.02); } 100% { transform: scale(1, 1); } }
.qmp-prisma.qmp-zug .qmp-gesicht { animation: qmp-prisma-t-gesicht .78s linear .17s 1 both; }
.qmp-prisma.qmp-zug .qmp-prisma-zacken { transform-origin: 51.75% 50% !important; animation: qmp-prisma-t-zacken .78s linear .17s 1 both; }
.qmp-prisma.qmp-zug .qmp-arme { animation: qmp-prisma-t-arme .78s linear .17s 1 both; }
.qmp-prisma.qmp-zug .qmp-prisma-blitz { animation: qmp-prisma-alle 1.4s ease-out 1 both; }
@keyframes qmp-prisma-alle { 0%, 26% { opacity: 0; } 40% { opacity: 1; } 58% { opacity: .15; } 68% { opacity: .8; } 100% { opacity: 0; } }
.qmp-prisma.qmp-zug .qmp-prisma-weiss { animation: qmp-prisma-weiss 1.4s ease-out 1 both; }
@keyframes qmp-prisma-weiss { 0%, 28% { opacity: 0; } 38% { opacity: .75; } 60%, 100% { opacity: 0; } }
.qmp-prisma.qmp-zug .qmp-prisma-regen { animation: qmp-prisma-fegen .8s .5s ease-out 1 both; }
@keyframes qmp-prisma-fegen { from { transform: translateX(0) skewX(-14deg); } to { transform: translateX(290%) skewX(-14deg); } }

/* ---------------- BOMMEL · Wolle mit Leuchtstreifen (Schleife 2 s) ----------------
   Streifen und Bommel leuchten im Wechsel (zwei Flächen statt fünf Punkte); der Bommel kippt. */
.qmp-bommel .qmp-hof { animation: none; }
.qmp-bommel-licht { opacity: .1; animation: qmp-bommel-lauf 2s linear infinite; }
.qmp-bommel-l1 { opacity: 1; }
.qmp-bommel-l2 { animation-delay: -1s; }
@keyframes qmp-bommel-lauf { 0% { opacity: .1; } 8%, 46% { opacity: 1; } 56%, 100% { opacity: .1; } }
.qmp-bommel-bommel { animation: qmp-bommel-kippen 2s ease-in-out infinite; }
@keyframes qmp-bommel-kippen { 0%, 100% { transform: translateX(-1.4%) rotate(-12deg); } 50% { transform: translateX(1.4%) rotate(12deg); } }
/* Signaturzug: der Bommel dreht eine Runde und hüpft, Streifen und Bommel blitzen zusammen */
.qmp-bommel.qmp-zug .qmp-bommel-bommel, .qmp-bommel.qmp-zug .qmp-bommel-l2 { animation: qmp-bommel-runde 1.5s cubic-bezier(.3, .6, .3, 1) 1 both; }
@keyframes qmp-bommel-runde { 0% { transform: translateY(0) rotate(0); } 14% { transform: translateY(2.4%) rotate(-20deg); } 48% { transform: translateY(-14%) rotate(200deg); } 78% { transform: translateY(1%) rotate(372deg); } 100% { transform: translateY(0) rotate(360deg); } }
.qmp-bommel.qmp-zug .qmp-bommel-l2 { opacity: 1; }
.qmp-bommel.qmp-zug .qmp-bommel-l1 { animation: qmp-bommel-alle 1.5s linear 1 both; }
@keyframes qmp-bommel-alle { 0% { opacity: .1; } 10% { opacity: 1; } 26% { opacity: .15; } 38% { opacity: 1; } 54% { opacity: .15; } 66% { opacity: 1; } 100% { opacity: .5; } }
.qmp-bommel.qmp-zug .qmp-leben { animation: qmp-bommel-hops 1.5s ease-out 1 both; }
@keyframes qmp-bommel-hops { 0%, 100% { transform: none; } 14% { transform: scale(1.06, .93); } 44% { transform: scale(.97, 1.04) translateY(-3%); } 74% { transform: scale(1.03, .97); } }

/* ---------------- ZUNDER · Glut (Schleife 2,4 s) ---------------- */
.qmp-zunder .qmp-leben { animation: qmp-zunder-atem 2.4s ease-in-out infinite; }
@keyframes qmp-zunder-atem { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(1.02, .985); } }
.qmp-zunder .qmp-hof, .qmp-zunder-glut { animation: qmp-zunder-puls 2.4s ease-in-out infinite; }
@keyframes qmp-zunder-puls { 0%, 60%, 100% { opacity: .42; } 12% { opacity: 1; } 24% { opacity: .6; } 36% { opacity: 1; } }
.qmp-zunder-weiss { opacity: 0; }
.qmp-zunder-zm { animation: qmp-zunder-z1 1.2s ease-in-out infinite; }
.qmp-zunder-zl { animation: qmp-zunder-z2 .8s ease-in-out infinite; }
.qmp-zunder-zr { animation: qmp-zunder-z3 .6s ease-in-out infinite; }
@keyframes qmp-zunder-z1 { 0%, 100% { transform: scale(1, 1) rotate(-2deg); } 30% { transform: scale(.93, 1.16) rotate(3deg); } 62% { transform: scale(1.06, .94) rotate(-4deg); } 82% { transform: scale(.97, 1.08) rotate(2deg); } }
@keyframes qmp-zunder-z2 { 0%, 100% { transform: scale(1, 1) rotate(3deg); } 40% { transform: scale(.92, 1.2) rotate(-5deg); } 72% { transform: scale(1.07, .92) rotate(4deg); } }
@keyframes qmp-zunder-z3 { 0%, 100% { transform: scale(1, 1) rotate(-3deg); } 50% { transform: scale(.94, 1.18) rotate(5deg); } }
.qmp-zunder[data-pose="aerger"] .qmp-zunder-zunge { animation-duration: .4s; }
.qmp-zunder[data-pose="aerger"] .qmp-zunder-glut { animation: none; opacity: 1; }
/* Signaturzug: Stichflamme */
.qmp-zunder.qmp-zug .qmp-leben { animation: qmp-zunder-sprung 1.4s cubic-bezier(.3, .2, .2, 1) 1 both; }
@keyframes qmp-zunder-sprung { 0% { transform: none; } 22% { transform: scale(1.14, .8); } 46% { transform: scale(.96, 1.05); } 70% { transform: scale(1.05, .95); } 100% { transform: none; } }
.qmp-zunder.qmp-zug .qmp-zunder-zunge { animation: qmp-zunder-stich 1.4s cubic-bezier(.3, .2, .2, 1) 1 both; }
@keyframes qmp-zunder-stich { 0% { transform: scale(1, 1); } 22% { transform: scale(1.2, .55); } 44% { transform: scale(1.2, 1.16); } 62% { transform: scale(1.08, 1.1) rotate(-4deg); } 82% { transform: scale(1.05, .9) rotate(3deg); } 100% { transform: scale(1, 1); } }
.qmp-zunder.qmp-zug .qmp-zunder-weiss { animation: qmp-zunder-weiss 1.4s ease-out 1 both; }
@keyframes qmp-zunder-weiss { 0%, 24% { opacity: 0; } 44% { opacity: 1; } 62% { opacity: .7; } 100% { opacity: 0; } }
.qmp-zunder.qmp-zug .qmp-zunder-glut, .qmp-zunder.qmp-zug .qmp-hof { animation: none; opacity: 1; }

/* ---------------- FLACKER · Neon (Schleife 3 s) ---------------- */
.qmp-flacker .qmp-leben { animation: qmp-flacker-wiegen 3s ease-in-out infinite; }
@keyframes qmp-flacker-wiegen { 0%, 100% { transform: rotate(-1.4deg); } 50% { transform: rotate(1.4deg); } }
.qmp-flacker .qmp-hof { animation: qmp-flacker-summen 3s ease-in-out infinite; }
@keyframes qmp-flacker-summen { 0%, 100% { opacity: .6; } 50% { opacity: 1; } }
.qmp-flacker-r2 { animation: qmp-flacker-flackern 3s linear infinite; }
@keyframes qmp-flacker-flackern { 0%, 66% { opacity: 1; } 68% { opacity: .2; } 70% { opacity: 1; } 73% { opacity: .35; } 76%, 100% { opacity: 1; } }
/* Signaturzug: aus — und Röhre für Röhre wieder an */
.qmp-flacker.qmp-zug .qmp-flacker-r1 { animation: qmp-flacker-an1 1.4s linear 1 both; }
.qmp-flacker.qmp-zug .qmp-flacker-r2 { animation: qmp-flacker-an2 1.4s linear 1 both; }
.qmp-flacker.qmp-zug .qmp-flacker-r3 { animation: qmp-flacker-an3 1.4s linear 1 both; }
.qmp-flacker.qmp-zug .qmp-flacker-r4 { animation: qmp-flacker-an4 1.4s linear 1 both; }
.qmp-flacker.qmp-zug .qmp-hof { animation: qmp-flacker-an5 1.4s linear 1 both; }
@keyframes qmp-flacker-an1 { 0% { opacity: 1; } 5%, 16% { opacity: .07; } 18% { opacity: 1; } 21% { opacity: .3; } 24%, 100% { opacity: 1; } }
@keyframes qmp-flacker-an2 { 0% { opacity: 1; } 5%, 34% { opacity: .07; } 36% { opacity: 1; } 39% { opacity: .3; } 42%, 100% { opacity: 1; } }
@keyframes qmp-flacker-an3 { 0% { opacity: 1; } 5%, 52% { opacity: .07; } 54% { opacity: 1; } 57% { opacity: .3; } 60%, 100% { opacity: 1; } }
@keyframes qmp-flacker-an4 { 0% { opacity: 1; } 5%, 70% { opacity: .07; } 72% { opacity: 1; } 75% { opacity: .3; } 78%, 100% { opacity: 1; } }
@keyframes qmp-flacker-an5 { 0% { opacity: .8; } 5%, 76% { opacity: 0; } 84%, 100% { opacity: 1; } }
.qmp-flacker.qmp-zug .qmp-leben { animation: qmp-flacker-ruck 1.4s ease-out 1 both; }
@keyframes qmp-flacker-ruck { 0%, 70% { transform: none; } 78% { transform: scale(1.05, 1.05) rotate(-3deg); } 100% { transform: none; } }

/* ---------------- QUECKI · flüssiges Metall (Schleife 4 s) ---------------- */
.qmp-quecki .qmp-leben { animation: qmp-quecki-atem 4s ease-in-out infinite; }
@keyframes qmp-quecki-atem { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(1.016, .984); } }
.qmp-quecki-horizont { left: 0; top: 40%; width: 100%; height: 20%; animation: qmp-quecki-horizont 4s ease-in-out infinite;
  background: linear-gradient(180deg, rgba(28, 36, 56, 0), rgba(28, 36, 56, .62) 46%, rgba(120, 140, 175, .5) 62%, rgba(28, 36, 56, 0)); }
@keyframes qmp-quecki-horizont { 0%, 100% { transform: translateY(-34%); } 50% { transform: translateY(38%); } }
.qmp-quecki-streif { left: -40%; top: -10%; width: 24%; height: 120%; transform: translateX(300%) skewX(-18deg); animation: qmp-quecki-streif 4s ease-in-out infinite;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, .96) 42%, rgba(255, 255, 255, .96) 58%, rgba(255, 255, 255, 0)); }
@keyframes qmp-quecki-streif { 0% { transform: translateX(0) skewX(-18deg); } 42%, 100% { transform: translateX(600%) skewX(-18deg); } }
.qmp-quecki-kern { animation: qmp-quecki-kern 2s ease-in-out infinite; }
@keyframes qmp-quecki-kern { 0%, 100% { transform: scale(.8); opacity: .65; } 50% { transform: scale(1.2); opacity: 1; } }
.qmp-quecki-welle { animation: qmp-quecki-welle 4s ease-in-out infinite; }
@keyframes qmp-quecki-welle { 0%, 100% { transform: rotate(-5deg); } 50% { transform: rotate(5deg) scale(1, 1.05); } }
/* Signaturzug: zerfließt zur Pfütze und schnellt zurück */
.qmp-quecki.qmp-zug .qmp-leben { animation: qmp-quecki-fliessen 1.5s cubic-bezier(.4, 0, .2, 1) 1 both; }
@keyframes qmp-quecki-fliessen { 0% { transform: none; } 24%, 42% { transform: scale(1.5, .26); } 60% { transform: scale(.84, 1.22); } 78% { transform: scale(1.06, .95); } 100% { transform: none; } }
.qmp-quecki.qmp-zug .qmp-quecki-streif { animation: qmp-quecki-blitz .55s .82s ease-out 1 both; }
@keyframes qmp-quecki-blitz { from { transform: translateX(0) skewX(-18deg); } to { transform: translateX(600%) skewX(-18deg); } }

/* ---------------- DISKO · Spiegelkugel mit Kopfhörern (Schleife 2 s = vier Schläge) ---------------- */
.qmp-disko .qmp-leben { animation: qmp-disko-takt .5s cubic-bezier(.3, 0, .3, 1) infinite; }
@keyframes qmp-disko-takt { 0%, 100% { transform: scale(1.03, .97); } 45% { transform: translateY(-2.6%) scale(.985, 1.02); } }
.qmp-disko-hoerer { animation: qmp-disko-puls .5s cubic-bezier(.3, 0, .3, 1) infinite; }
@keyframes qmp-disko-puls { 0%, 100% { transform: scale(1.05, 1.03); } 45% { transform: scale(1, 1); } }
.qmp-disko-flecken { left: -100%; top: 0; width: 300%; height: 100%; animation: qmp-disko-drehen 2s linear infinite; }
@keyframes qmp-disko-drehen { from { transform: translateX(0); } to { transform: translateX(-16.666%); } }
.qmp-disko-weiss { inset: 0; background: #fff; opacity: 0; }
/* Signaturzug: Wirbel — zwei Drehungen IN DER TIEFE (die Kugel bleibt rund: Das Gesicht wandert über sie, die Kopfhörer drehen mit — die Bilder „eine Drehung"
   stehen unten bei „DIE SHOW · DISKO"). Vorher klappte die ganze Figur zweimal in der Fläche um; das sah aus wie ein Fehler. */
.qmp-disko.qmp-zug .qmp-leben { animation: qmp-disko-wirbel 1.3s cubic-bezier(.4, 0, .2, 1) 1 both; }
@keyframes qmp-disko-wirbel { 0% { transform: scale(1, 1); } 10% { transform: scale(1.08, .92); } 28% { transform: translateY(-5%) scale(.96, 1.05); } 46% { transform: translateY(-3%) scale(1, 1.01); } 64% { transform: translateY(-5%) scale(.96, 1.05); } 82% { transform: scale(1.06, .96); } 100% { transform: scale(1, 1); } }
.qmp-disko.qmp-zug .qmp-gesicht { animation: qmp-disko-t-gesicht .5s linear .14s 2 both; }
.qmp-disko.qmp-zug .qmp-disko-hoerer, .qmp-disko.qmp-zug .qmp-arme { animation: qmp-disko-t-hoerer .5s linear .14s 2 both; }
.qmp-disko.qmp-zug .qmp-disko-vorn { animation: qmp-disko-t-vorn .5s linear .14s 2 both; }
.qmp-disko.qmp-zug .qmp-disko-flecken { animation: qmp-disko-rasen 1.3s cubic-bezier(.3, 0, .3, 1) 1 both; }
@keyframes qmp-disko-rasen { from { transform: translateX(0); } to { transform: translateX(-33.332%); } }
.qmp-disko.qmp-zug .qmp-disko-weiss { animation: qmp-disko-weiss 1.3s ease-out 1 both; }
@keyframes qmp-disko-weiss { 0%, 20% { opacity: 0; } 30% { opacity: .7; } 44% { opacity: 0; } 58% { opacity: 0; } 66% { opacity: .7; } 84%, 100% { opacity: 0; } }

/* ---------------- ZAPPI · Plasma (Schleife 2 s) ---------------- */
.qmp-zappi .qmp-leben { animation: qmp-zappi-atem 2s ease-in-out infinite; }
@keyframes qmp-zappi-atem { 0%, 100% { transform: scale(1, 1); } 50% { transform: scale(1.012, .99); } }
.qmp-zappi-bogen { opacity: 0; animation: qmp-zappi-tanz 2s linear infinite; }
.qmp-zappi-a { opacity: 1; }
.qmp-zappi-b { animation-delay: -1.34s; }
.qmp-zappi-c { animation-delay: -.67s; }
@keyframes qmp-zappi-tanz { 0% { opacity: 0; transform: rotate(-7deg); } 3% { opacity: 1; } 12% { opacity: .55; } 16% { opacity: 1; transform: rotate(-2deg); } 30% { opacity: 1; transform: rotate(5deg); } 34% { opacity: .3; } 38% { opacity: 1; } 42%, 100% { opacity: 0; transform: rotate(8deg); } }
.qmp-zappi-kern { animation: qmp-zappi-kern .5s ease-in-out infinite alternate; }
@keyframes qmp-zappi-kern { from { transform: scale(.85); opacity: .7; } to { transform: scale(1.2); opacity: 1; } }
.qmp-zappi .qmp-hof { animation: qmp-zappi-hof 2s linear infinite; }
@keyframes qmp-zappi-hof { 0%, 100% { opacity: .65; } 16% { opacity: 1; } 34% { opacity: .6; } 50% { opacity: 1; } 68% { opacity: .65; } 84% { opacity: 1; } }
.qmp-zappi-voll { opacity: 0; }
/* Signaturzug: Entladung */
.qmp-zappi.qmp-zug .qmp-zappi-voll { animation: qmp-zappi-voll 1.2s linear 1 both; }
@keyframes qmp-zappi-voll { 0%, 14% { opacity: 0; } 20% { opacity: 1; } 28% { opacity: .2; } 36% { opacity: 1; } 52% { opacity: .5; } 60% { opacity: 1; } 100% { opacity: 0; } }
.qmp-zappi.qmp-zug .qmp-leben { animation: qmp-zappi-zucken 1.2s linear 1 both; }
@keyframes qmp-zappi-zucken { 0%, 12% { transform: none; } 18% { transform: translateX(-2.4%) scale(1.05, .96); } 24% { transform: translateX(2.4%) scale(.97, 1.04); } 30% { transform: translateX(-1.8%); } 36% { transform: translateX(1.8%) scale(1.04, 1.04); } 48% { transform: translateX(-1%); } 60% { transform: scale(1.06, 1.06); } 100% { transform: none; } }
.qmp-zappi.qmp-zug .qmp-hof { animation: none; opacity: 1; }

/* =====================================================================
   DIE SHOW — je Figur ihr AUFTRITT und ihr JUBEL (monster/pro-figuren.js:
   d.spiel, QN.monsterProSpiel). Eine Choreografie läuft in TAKTEN; je Takt
   trägt die Figur data-akt="auftritt-1" … "jubel-3" und --qmp-d (die
   Sekunden dieses Takts). Jeder Takt beginnt in der Haltung, in der der
   vorige endet. Bewegt wird der GANZE Körper:
     .qmp-akt      die Bahn: Sprung, Bogen, Rolle, Salto (dreht um die Körpermitte)
     .qmp-leben    Stauchen und Strecken (am Fuß)
     .qmp-gesicht  das Gesicht läuft nach (und wandert bei einer Drehung in der Tiefe)
     .qmp-arme     die Arme schwingen nach
     Anhängsel     Flammen, Bommel, Kopfhörer, Wiege, Zacken … laufen nach
   Handwerk: Ausholen · Stauchen und Strecken · Nachschwingen · überlappende
   Bewegung · nichts fährt linear (je Abschnitt eine eigene Kurve: hinauf
   bremsend, hinab beschleunigend).
   Über jedem Abschnitt steht das ZEITBLATT der Figur — danach spielt auch
   ihre Szene (handy-rahmen/k6/figurbuehne.css, Abschnitt 4).
   ===================================================================== */
/* Solange eine Choreografie läuft, behält jedes Teil, das sich in IRGENDEINEM ihrer Takte bewegt, seine eigene Ebene (will-change) — sonst baut der Browser bei
   jedem Taktwechsel Ebenen um und zeichnet sie neu: ein Ruck genau im Augenblick der Landung. (Nur während der zwei, drei Sekunden; in Ruhe gilt das nicht.) */
.qmp[data-akt] :is(.qmp-akt, .qmp-leben, .qmp-gesicht, .qmp-arme, .qmp-hof,
  .qmp-zunder-zunge, .qmp-zunder-weiss, .qmp-disko-hoerer, .qmp-disko-vorn, .qmp-disko-flecken, .qmp-disko-weiss, .qmp-flacker-r, .qmp-prisma-zacken, .qmp-prisma-blitz, .qmp-prisma-regen, .qmp-prisma-weiss,
  .qmp-funkel-wiege, .qmp-funkel-haut, .qmp-funkel-bild, .qmp-funkel-schnuppe, .qmp-funkel-hell, .qmp-bommel-bommel, .qmp-bommel-licht, .qmp-bommel-faden,
  .qmp-katze-kopf, .qmp-katze-rumpf, .qmp-katze-schweif, .qmp-katze-ol, .qmp-katze-or, .qmp-katze-putz) { will-change: transform, opacity; }

/* ---------------- DIE SHOW · ZUNDER (wild: ein Ausbruch) ----------------
   AUFTRITT 1,5 s   Takt 1 (0,95 s)  0,00–0,44 nichts zu sehen (die Szene baut sich auf) · 0,44 er bricht als Stichflamme aus dem Sockel ·
                                     0,59 schießt gestreckt hoch · 0,72 Scheitel · 0,95 schlägt auf
                    Takt 2 (0,55 s)  Einschlag: tief gestaucht, federt hoch, schwingt aus; die Flammen schlagen nach
   JUBEL 3,2 s      Takt 1 (0,6 s)   AUSHOLEN: Er staut den Druck — duckt sich tief, zittert, die Flammen ducken sich, die Risse glühen auf
                    Takt 2 (1,0 s)   AUSBRUCH: 0,14 schießt gestreckt hoch · 0,50–0,62 Scheitel, er reißt die Fäuste hoch · 1,00 schlägt auf
                    Takt 3 (1,6 s)   EINSCHLAG (0,00) gestaucht, federt, schwingt aus (bis 0,55) · HÖHEPUNKT (0,70–0,86): Er duckt sich — die STICHFLAMME
                                     schießt aus dem Schopf, die Risse weißglühend · bis 1,6 ruhig */
.qmp-zunder[data-akt="auftritt-1"] .qmp-akt { animation: qmp-zunder-a1-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-zunder-a1-bahn { 0%, 44% { opacity: 0; transform: none; } 46% { opacity: 1; transform: none; animation-timing-function: cubic-bezier(.1, .7, .3, 1); }
  76% { opacity: 1; transform: translateY(-42%); animation-timing-function: cubic-bezier(.5, 0, .85, .6); } 100% { opacity: 1; transform: none; } }
.qmp-zunder[data-akt="auftritt-1"] .qmp-leben { animation: qmp-zunder-a1-koerper var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-a1-koerper { 0%, 46% { transform: scale(.5, .2); } 58% { transform: scale(.76, 1.36); } 76% { transform: scale(1.04, .96); } 100% { transform: scale(.9, 1.14); } }
.qmp-zunder[data-akt="auftritt-1"] .qmp-zunder-zunge { animation: qmp-zunder-a1-zunge var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-a1-zunge { 0%, 46% { transform: scale(1.2, .4); } 60% { transform: scale(.86, 2.2); } 76% { transform: scale(1.1, 1.2); } 100% { transform: scale(.9, 2); } }
.qmp-zunder[data-akt="auftritt-1"] .qmp-zunder-weiss { animation: qmp-zunder-a1-weiss var(--qmp-d) linear 1 both; }
@keyframes qmp-zunder-a1-weiss { 0%, 46% { opacity: 1; } 76% { opacity: .9; } 100% { opacity: .5; } }
.qmp-zunder[data-akt^="auftritt"] .qmp-zunder-glut, .qmp-zunder[data-akt^="auftritt"] .qmp-hof, .qmp-zunder[data-akt^="jubel"] .qmp-zunder-glut, .qmp-zunder[data-akt^="jubel"] .qmp-hof { animation: none; opacity: 1; }
/* Einschlag (auch der des Jubels beginnt so): tief gestaucht — federt — schwingt aus; Gesicht und Arme laufen nach, die Flammen schlagen nach */
.qmp-zunder[data-akt="auftritt-2"] .qmp-leben { animation: qmp-zunder-lande var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-lande { 0% { transform: scale(1.28, .68); } 24% { transform: translateY(-5%) scale(.9, 1.13); } 48% { transform: scale(1.08, .93); } 72% { transform: scale(.98, 1.03); } 100% { transform: none; } }
.qmp-zunder[data-akt="auftritt-2"] .qmp-gesicht { animation: qmp-zunder-lande-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-lande-g { 0% { transform: translateY(4%); } 30% { transform: translateY(-2.4%); } 58% { transform: translateY(1%); } 100% { transform: none; } }
.qmp-zunder[data-akt="auftritt-2"] .qmp-arme { animation: qmp-zunder-lande-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-lande-a { 0% { transform: translateY(6%) scale(1.06, .9); } 34% { transform: translateY(-4%) scale(.97, 1.08); } 64% { transform: translateY(1.4%); } 100% { transform: none; } }
.qmp-zunder[data-akt="auftritt-2"] .qmp-zunder-zunge { animation: qmp-zunder-lande-z var(--qmp-d) ease-in-out 1 both; }
.qmp-zunder[data-akt="auftritt-2"] .qmp-zunder-zl { animation-delay: .04s; } .qmp-zunder[data-akt="auftritt-2"] .qmp-zunder-zr { animation-delay: .08s; }
@keyframes qmp-zunder-lande-z { 0% { transform: scale(1.3, .4); } 30% { transform: scale(.86, 1.9) rotate(3deg); } 55% { transform: scale(1.1, .86) rotate(-4deg); } 78% { transform: scale(.96, 1.14) rotate(2deg); } 100% { transform: scale(1, 1) rotate(-2deg); } }
.qmp-zunder[data-akt="auftritt-2"] .qmp-zunder-weiss { animation: qmp-zunder-aus-weiss var(--qmp-d) ease-out 1 both; }
@keyframes qmp-zunder-aus-weiss { 0% { opacity: .8; } 100% { opacity: 0; } }

/* JUBEL · Takt 1 — AUSHOLEN */
.qmp-zunder[data-akt="jubel-1"] .qmp-leben { animation: qmp-zunder-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j1 { 0% { transform: none; } 16% { transform: scale(.97, 1.04); } 44% { transform: scale(1.14, .82); } 54% { transform: translateX(-1.4%) scale(1.17, .78); } 64% { transform: translateX(1.4%) scale(1.19, .75); }
  74% { transform: translateX(-1.4%) scale(1.2, .73); } 84% { transform: translateX(1.4%) scale(1.21, .72); } 92% { transform: translateX(-1%) scale(1.22, .71); } 100% { transform: scale(1.22, .7); } }
.qmp-zunder[data-akt="jubel-1"] .qmp-gesicht, .qmp-zunder[data-akt="jubel-1"] .qmp-arme { animation: qmp-zunder-j1-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j1-g { 0% { transform: none; } 16% { transform: translateY(-1%); } 50%, 100% { transform: translateY(2.6%); } }
.qmp-zunder[data-akt="jubel-1"] .qmp-zunder-zunge { animation: qmp-zunder-j1-z var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j1-z { 0% { transform: scale(1, 1); } 16% { transform: scale(.96, 1.24); } 46% { transform: scale(1.16, .56); } 60% { transform: scale(1.2, .46) rotate(-5deg); } 74% { transform: scale(1.2, .5) rotate(5deg); } 88% { transform: scale(1.22, .42) rotate(-4deg); } 100% { transform: scale(1.24, .4); } }
.qmp-zunder[data-akt="jubel-1"] .qmp-zunder-weiss { animation: qmp-zunder-j1-w var(--qmp-d) ease-in 1 both; }
@keyframes qmp-zunder-j1-w { 0%, 30% { opacity: 0; } 100% { opacity: .7; } }
/* JUBEL · Takt 2 — DER AUSBRUCH */
.qmp-zunder[data-akt="jubel-2"] .qmp-akt { animation: qmp-zunder-j2-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-zunder-j2-bahn { 0% { transform: none; animation-timing-function: cubic-bezier(.12, .7, .3, 1); } 50% { transform: translateY(-41%) rotate(-5deg); animation-timing-function: ease-in-out; }
  56% { transform: translateY(-42%) rotate(5deg); } 62% { transform: translateY(-41%) rotate(-3deg); animation-timing-function: cubic-bezier(.5, 0, .85, .6); } 100% { transform: none; } }
.qmp-zunder[data-akt="jubel-2"] .qmp-leben { animation: qmp-zunder-j2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j2 { 0% { transform: scale(1.22, .7); } 12% { transform: scale(.76, 1.4); } 36% { transform: scale(.92, 1.12); } 52% { transform: scale(1.08, .94); } 64% { transform: scale(1.02, 1); } 100% { transform: scale(.88, 1.16); } }
.qmp-zunder[data-akt="jubel-2"] .qmp-zunder-zunge { animation: qmp-zunder-j2-z var(--qmp-d) ease-in-out 1 both; }
.qmp-zunder[data-akt="jubel-2"] .qmp-zunder-zl { animation-delay: .04s; } .qmp-zunder[data-akt="jubel-2"] .qmp-zunder-zr { animation-delay: .07s; }
@keyframes qmp-zunder-j2-z { 0% { transform: scale(1.24, .4); } 12% { transform: scale(1.1, .5); } 30% { transform: scale(.8, 2.5); } 50% { transform: scale(1.14, 1.3) rotate(6deg); } 58% { transform: scale(1.1, 1.5) rotate(-6deg); } 66% { transform: scale(1, 1.4); } 100% { transform: scale(.86, 2.3); } }
.qmp-zunder[data-akt="jubel-2"] .qmp-zunder-weiss { animation: qmp-zunder-j2-w var(--qmp-d) linear 1 both; }
@keyframes qmp-zunder-j2-w { 0% { opacity: .7; } 12%, 60% { opacity: 1; } 100% { opacity: .7; } }
.qmp-zunder[data-akt="jubel-2"] .qmp-gesicht { animation: qmp-zunder-j2-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j2-g { 0% { transform: translateY(2.6%); } 14% { transform: translateY(3%); } 50% { transform: translateY(-2%); } 100% { transform: translateY(-3%); } }
.qmp-zunder[data-akt="jubel-2"] .qmp-arme { animation: qmp-zunder-j2-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j2-a { 0% { transform: translateY(5%) scale(.9); } 20% { transform: translateY(3%) scale(.96, 1.1); } 50% { transform: translateY(-3%) scale(1.1); } 56% { transform: translateY(-1%) scale(1.02); } 62% { transform: translateY(-3%) scale(1.1); } 100% { transform: translateY(-5%) scale(1, 1.1); } }
/* JUBEL · Takt 3 — EINSCHLAG, dann der HÖHEPUNKT: die Stichflamme */
.qmp-zunder[data-akt="jubel-3"] .qmp-leben { animation: qmp-zunder-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j3 { 0% { transform: scale(1.32, .64); } 8% { transform: translateY(-5%) scale(.9, 1.13); } 17% { transform: scale(1.08, .93); } 26% { transform: scale(.98, 1.03); } 34% { transform: none; }
  44% { transform: scale(1.14, .82); } 53% { transform: scale(.92, 1.12); } 66% { transform: scale(1.04, .96); } 80% { transform: scale(.99, 1.01); } 100% { transform: none; } }
.qmp-zunder[data-akt="jubel-3"] .qmp-gesicht { animation: qmp-zunder-j3-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j3-g { 0% { transform: translateY(4.4%); } 10% { transform: translateY(-2.4%); } 20% { transform: translateY(1%); } 34% { transform: none; } 45% { transform: translateY(3%); } 55% { transform: translateY(-2%); } 70%, 100% { transform: none; } }
.qmp-zunder[data-akt="jubel-3"] .qmp-arme { animation: qmp-zunder-j3-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-zunder-j3-a { 0% { transform: translateY(7%) scale(1.06, .88); } 11% { transform: translateY(-4%) scale(.97, 1.08); } 22% { transform: translateY(1.4%); } 34% { transform: none; } 45% { transform: translateY(4%) scale(1.04, .9); } 55% { transform: translateY(-4%) scale(1.08, 1.12); } 62% { transform: translateY(-1%) scale(1.02); } 69% { transform: translateY(-3.4%) scale(1.07, 1.1); } 84%, 100% { transform: none; } }
.qmp-zunder[data-akt="jubel-3"] .qmp-zunder-zunge { animation: qmp-zunder-j3-z var(--qmp-d) ease-in-out 1 both; }
.qmp-zunder[data-akt="jubel-3"] .qmp-zunder-zl { animation-delay: .04s; } .qmp-zunder[data-akt="jubel-3"] .qmp-zunder-zr { animation-delay: .07s; }
@keyframes qmp-zunder-j3-z { 0% { transform: scale(1.3, .4); } 10% { transform: scale(.86, 1.8) rotate(3deg); } 20% { transform: scale(1.08, .9) rotate(-3deg); } 34% { transform: scale(1, 1); } 44% { transform: scale(1.26, .46); }
  53% { transform: scale(1.3, 2.6); } 61% { transform: scale(1.16, 2.2) rotate(-5deg); } 69% { transform: scale(1.2, 2.4) rotate(5deg); } 80% { transform: scale(1.06, 1.3) rotate(-3deg); } 90% { transform: scale(1.02, .92) rotate(2deg); } 100% { transform: scale(1, 1) rotate(-2deg); } }
.qmp-zunder[data-akt="jubel-3"] .qmp-zunder-weiss { animation: qmp-zunder-j3-w var(--qmp-d) linear 1 both; }
@keyframes qmp-zunder-j3-w { 0% { opacity: .9; } 22% { opacity: .15; } 44% { opacity: .4; } 52%, 70% { opacity: 1; } 100% { opacity: 0; } }

/* ---------------- DIE SHOW · DISKO (Partykanone: Sie dreht sich — in der Tiefe) ----------------
   EINE DREHUNG IN DER TIEFE (nach links, so wie ihre Kacheln in Ruhe wandern) — kein Umklappen: Die Kugel bleibt rund. Das GESICHT wandert über sie nach links,
   wird am Rand schmal und verschwindet dahinter (es liegt in der Form der Kugel), die Rückseite zeigt nur Kacheln, dann kommt es von rechts wieder. Die KACHELN
   rasen mit (drei Felder je Drehung), der GLANZ bleibt stehen. Der Bügel der KOPFHÖRER wird schmal, und bei Vierteldrehung zieht EINE Muschel von vorn quer über
   die Kugel (.qmp-disko-vorn — geschnitten, nicht überblendet). Die vier Bilder „eine Drehung" (qmp-disko-t-…) laufen je Drehung einmal durch.
   AUFTRITT 1,5 s   Takt 1 (1,0 s)   0,18 sie kommt von oben herab (an ihrem Seil — das zeichnet die Szene), dreht sich dabei zweimal, wird langsamer · 1,0 setzt auf
                    Takt 2 (0,5 s)   setzt auf: gestaucht, federt einmal hoch, die Kopfhörer wippen nach
   JUBEL 3,3 s      Takt 1 (0,55 s)  AUSHOLEN: Sie geht in die Knie und dreht sich ein Stück zurück (nach rechts)
                    Takt 2 (1,15 s)  SPRUNG mit einer ganzen Drehung: 0,09 ab · 0,58 Scheitel (die Rückseite blitzt) · 1,06 das Gesicht ist wieder vorn · 1,15 landet
                    Takt 3 (1,6 s)   LANDUNG (0,00–0,34) gestaucht, federt · HÖHEPUNKT, der WIRBEL (0,45–1,18): zwei schnelle Drehungen am Platz, die Kugel blitzt
                                     bei jeder halben · 1,22 sie steht, streckt sich („ta-da") · bis 1,6 zurück in ihren Takt */
.qmp-disko-vorn { opacity: 0; }
@keyframes qmp-disko-t-gesicht { 0% { transform: translateX(0) scaleX(1); } 6.25% { transform: translateX(-7.7%) scaleX(.92); } 12.5% { transform: translateX(-14.1%) scaleX(.71); } 18.75% { transform: translateX(-18.5%) scaleX(.38); }
  25%, 75% { transform: translateX(-20%) scaleX(0); } 75.01% { transform: translateX(20%) scaleX(0); } 81.25% { transform: translateX(18.5%) scaleX(.38); } 87.5% { transform: translateX(14.1%) scaleX(.71); } 93.75% { transform: translateX(7.7%) scaleX(.92); } 100% { transform: translateX(0) scaleX(1); } }
@keyframes qmp-disko-t-hoerer { 0%, 50%, 100% { transform: scaleX(1); opacity: 1; } 6.25%, 43.75%, 56.25%, 93.75% { transform: scaleX(.92); opacity: 1; } 12.5%, 37.5%, 62.5%, 87.5% { transform: scaleX(.71); opacity: 1; }
  18.99%, 31%, 68.99%, 81% { transform: scaleX(.36); opacity: 1; } 19%, 30.99%, 69%, 80.99% { transform: scaleX(.36); opacity: 0; } }
@keyframes qmp-disko-t-vorn { 0%, 18.99%, 31%, 68.99%, 81%, 100% { opacity: 0; transform: translateX(10.6%) scaleX(.7); } 19%, 69% { opacity: 1; transform: translateX(10.6%) scaleX(.7); } 25%, 75% { opacity: 1; transform: translateX(0) scaleX(1); }
  30.99%, 80.99% { opacity: 1; transform: translateX(-10.6%) scaleX(.7); } }
/* (ihr Hof zeichnet auch die Muscheln der Kopfhörer nach — solange sie sich dreht, wäre er ein Geisterbild an den Seiten: Er ist dann aus) */
.qmp-disko[data-akt] .qmp-hof { animation: none; opacity: 1; }
.qmp-disko[data-akt="auftritt-1"] .qmp-hof, .qmp-disko[data-akt="jubel-2"] .qmp-hof, .qmp-disko.qmp-zug .qmp-hof { animation: none; opacity: 0; }
.qmp-disko[data-akt="jubel-3"] .qmp-hof { animation: qmp-disko-j3-hof var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j3-hof { 0%, 26% { opacity: 1; } 28%, 76% { opacity: 0; } 86%, 100% { opacity: 1; } }

.qmp-disko[data-akt="auftritt-1"] .qmp-akt { animation: qmp-disko-a1-bahn var(--qmp-d) cubic-bezier(.3, .5, .3, 1) 1 both; }
@keyframes qmp-disko-a1-bahn { 0%, 18% { transform: translateY(-125%); } 100% { transform: none; } }
.qmp-disko[data-akt="auftritt-1"] .qmp-leben { animation: qmp-disko-a1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-a1 { 0%, 80% { transform: scale(.97, 1.04); } 100% { transform: scale(.95, 1.07); } }
.qmp-disko[data-akt="auftritt-1"] .qmp-gesicht { animation: qmp-disko-t-gesicht calc(var(--qmp-d) * .39) linear calc(var(--qmp-d) * .18) 2 both; }
.qmp-disko[data-akt="auftritt-1"] .qmp-disko-hoerer, .qmp-disko[data-akt="auftritt-1"] .qmp-arme { animation: qmp-disko-t-hoerer calc(var(--qmp-d) * .39) linear calc(var(--qmp-d) * .18) 2 both; }
.qmp-disko[data-akt="auftritt-1"] .qmp-disko-vorn { animation: qmp-disko-t-vorn calc(var(--qmp-d) * .39) linear calc(var(--qmp-d) * .18) 2 both; }
.qmp-disko[data-akt="auftritt-1"] .qmp-disko-flecken { animation: qmp-disko-drehen calc(var(--qmp-d) * .13) linear calc(var(--qmp-d) * .18) 6 both; }
.qmp-disko[data-akt="auftritt-1"] .qmp-disko-weiss { animation: qmp-disko-a1-w var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-a1-w { 0%, 30%, 44%, 70%, 84%, 100% { opacity: 0; } 37%, 77% { opacity: .5; } }
/* aufsetzen (auch im Jubel): gestaucht — ein Federn — im Takt; die Kopfhörer wippen nach */
.qmp-disko[data-akt="auftritt-2"] .qmp-leben { animation: qmp-disko-lande var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-lande { 0% { transform: scale(1.18, .82); } 30% { transform: translateY(-8%) scale(.95, 1.06); } 58% { transform: scale(1.07, .94); } 80% { transform: scale(.99, 1.01); } 100% { transform: scale(1.03, .97); } }
.qmp-disko[data-akt="auftritt-2"] .qmp-disko-hoerer { animation: qmp-disko-lande-h var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-lande-h { 0% { transform: translateY(4%) scale(1.08, .96); } 36% { transform: translateY(-3%) scale(.97, 1.04); } 66% { transform: translateY(1.2%) scale(1.03, 1); } 100% { transform: scale(1.05, 1.03); } }
.qmp-disko[data-akt="auftritt-2"] .qmp-arme { animation: qmp-disko-lande-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-lande-a { 0% { transform: translateY(6%) scale(1.06, .9); } 36% { transform: translateY(-5%) scale(.97, 1.08); } 66% { transform: translateY(1.6%); } 100% { transform: none; } }
.qmp-disko[data-akt="auftritt-2"] .qmp-disko-weiss { animation: qmp-disko-blitz var(--qmp-d) ease-out 1 both; }
@keyframes qmp-disko-blitz { 0% { opacity: .7; } 40%, 100% { opacity: 0; } }

/* JUBEL · Takt 1 — AUSHOLEN: in die Knie, ein Stück zurückgedreht */
.qmp-disko[data-akt="jubel-1"] .qmp-leben { animation: qmp-disko-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-j1 { 0% { transform: scale(1.03, .97); } 24% { transform: scale(.98, 1.03); } 100% { transform: scale(1.16, .82); } }
.qmp-disko[data-akt="jubel-1"] .qmp-gesicht { animation: qmp-disko-j1-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-j1-g { 0%, 20% { transform: translateX(0) scaleX(1); } 100% { transform: translateX(9%) scaleX(.9); } }
.qmp-disko[data-akt="jubel-1"] .qmp-disko-flecken { animation: qmp-disko-j1-f var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-j1-f { 0%, 20% { transform: translateX(0); } 100% { transform: translateX(2.8%); } }
.qmp-disko[data-akt="jubel-1"] .qmp-disko-hoerer, .qmp-disko[data-akt="jubel-1"] .qmp-arme { animation: qmp-disko-j1-h var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-j1-h { 0% { transform: none; } 100% { transform: translateY(3%) scaleX(.9); } }
/* JUBEL · Takt 2 — DER SPRUNG mit einer ganzen Drehung (sie läuft von 8 % bis 92 % des Takts) */
.qmp-disko[data-akt="jubel-2"] .qmp-akt { animation: qmp-disko-j2-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j2-bahn { 0% { transform: none; animation-timing-function: cubic-bezier(.14, .7, .3, 1); } 50% { transform: translateY(-34%); animation-timing-function: cubic-bezier(.6, 0, .86, .3); } 100% { transform: none; } }
.qmp-disko[data-akt="jubel-2"] .qmp-leben { animation: qmp-disko-j2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-j2 { 0% { transform: scale(1.16, .82); } 11% { transform: scale(.84, 1.2); } 34% { transform: scale(.96, 1.05); } 52% { transform: scale(1.04, .97); } 100% { transform: scale(.92, 1.1); } }
.qmp-disko[data-akt="jubel-2"] .qmp-gesicht { animation: qmp-disko-j2-g var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j2-g { 0% { transform: translateX(9%) scaleX(.9); } 8% { transform: translateX(0) scaleX(1); } 13.25% { transform: translateX(-7.7%) scaleX(.92); } 18.5% { transform: translateX(-14.1%) scaleX(.71); } 23.75% { transform: translateX(-18.5%) scaleX(.38); }
  29%, 71% { transform: translateX(-20%) scaleX(0); } 71.01% { transform: translateX(20%) scaleX(0); } 76.25% { transform: translateX(18.5%) scaleX(.38); } 81.5% { transform: translateX(14.1%) scaleX(.71); } 86.75% { transform: translateX(7.7%) scaleX(.92); } 92%, 100% { transform: translateX(0) scaleX(1); } }
.qmp-disko[data-akt="jubel-2"] .qmp-disko-hoerer, .qmp-disko[data-akt="jubel-2"] .qmp-arme { animation: qmp-disko-j2-h var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j2-h { 0% { transform: scaleX(.9); opacity: 1; } 8%, 50%, 92%, 100% { transform: scaleX(1); opacity: 1; } 18.5%, 39.5%, 60.5%, 81.5% { transform: scaleX(.71); opacity: 1; } 23.95%, 34.04%, 65.95%, 76.04% { transform: scaleX(.36); opacity: 1; }
  23.96%, 34.03%, 65.96%, 76.03% { transform: scaleX(.36); opacity: 0; } }
.qmp-disko[data-akt="jubel-2"] .qmp-disko-vorn { animation: qmp-disko-j2-v var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j2-v { 0%, 23.95%, 34.04%, 65.95%, 76.04%, 100% { opacity: 0; transform: translateX(10.6%) scaleX(.7); } 23.96%, 65.96% { opacity: 1; transform: translateX(10.6%) scaleX(.7); } 29%, 71% { opacity: 1; transform: translateX(0) scaleX(1); }
  34.03%, 76.03% { opacity: 1; transform: translateX(-10.6%) scaleX(.7); } }
.qmp-disko[data-akt="jubel-2"] .qmp-disko-flecken { animation: qmp-disko-drehen calc(var(--qmp-d) * .28) linear calc(var(--qmp-d) * .08) 3 both; }
.qmp-disko[data-akt="jubel-2"] .qmp-disko-weiss { animation: qmp-disko-j2-w var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j2-w { 0%, 38%, 62%, 100% { opacity: 0; } 50% { opacity: .65; } }
/* JUBEL · Takt 3 — LANDUNG, dann der HÖHEPUNKT: der Wirbel (zwei Drehungen von 28 % bis 74 %), „ta-da" */
.qmp-disko[data-akt="jubel-3"] .qmp-leben { animation: qmp-disko-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-disko-j3 { 0% { transform: scale(1.2, .8); } 7% { transform: translateY(-7%) scale(.95, 1.06); } 14% { transform: scale(1.07, .94); } 21% { transform: scale(.99, 1.01); } 27% { transform: scale(1.1, .88); }
  34% { transform: translateY(-5%) scale(.96, 1.05); } 51% { transform: translateY(-3%) scale(1, 1.01); } 68% { transform: translateY(-5%) scale(.96, 1.05); } 76% { transform: scale(1.12, .88); } 84% { transform: translateY(-3%) scale(.94, 1.08); } 92% { transform: scale(1.04, .96); } 100% { transform: scale(1.03, .97); } }
.qmp-disko[data-akt="jubel-3"] .qmp-gesicht { animation: qmp-disko-t-gesicht calc(var(--qmp-d) * .23) linear calc(var(--qmp-d) * .28) 2 both; }
.qmp-disko[data-akt="jubel-3"] .qmp-disko-hoerer { animation: qmp-disko-lande-h calc(var(--qmp-d) * .26) ease-in-out 1 both, qmp-disko-t-hoerer calc(var(--qmp-d) * .23) linear calc(var(--qmp-d) * .28) 2 forwards; }
.qmp-disko[data-akt="jubel-3"] .qmp-arme { animation: qmp-disko-lande-a calc(var(--qmp-d) * .26) ease-in-out 1 both, qmp-disko-t-hoerer calc(var(--qmp-d) * .23) linear calc(var(--qmp-d) * .28) 2 forwards; }
.qmp-disko[data-akt="jubel-3"] .qmp-disko-vorn { animation: qmp-disko-t-vorn calc(var(--qmp-d) * .23) linear calc(var(--qmp-d) * .28) 2 both; }
.qmp-disko[data-akt="jubel-3"] .qmp-disko-flecken { animation: qmp-disko-drehen calc(var(--qmp-d) * .0767) linear calc(var(--qmp-d) * .28) 6 both; }
.qmp-disko[data-akt="jubel-3"] .qmp-disko-weiss { animation: qmp-disko-j3-w var(--qmp-d) linear 1 both; }
@keyframes qmp-disko-j3-w { 0% { opacity: .6; } 10%, 33%, 46%, 56%, 69%, 74%, 100% { opacity: 0; } 39.5%, 62.5% { opacity: .6; } 78% { opacity: .85; } }

/* ---------------- DIE SHOW · FLACKER (cool: Licht aus, Salto, Licht an) ----------------
   AUFTRITT 1,6 s   Takt 1 (1,05 s)  die Röhren der Szene springen nacheinander an · 0,52 er fällt herab, im Dunkeln — nur sein Umriss glimmt · 1,05 schlägt auf
                    Takt 2 (0,55 s)  Aufschlag: gestaucht, federt — und er ZÜNDET: Umriss (0,00) · Kappe (0,10) · Brille (0,20) · Grinsen (0,30) · Hof (0,38);
                                     die Kappe hüpft nach
   JUBEL 3,0 s      Takt 1 (0,5 s)   AUSHOLEN: lehnt sich zurück, sinkt — und macht das Licht aus: Grinsen · Brille · Kappe · Umriss (die Szene wird dunkel)
                    Takt 2 (1,0 s)   SALTO RÜCKWÄRTS: 0,10 alles Licht an, ab · 0,12–0,88 eine ganze Drehung in der Luft (Scheitel 0,50–0,62) · 1,00 landet
                    Takt 3 (1,5 s)   LANDUNG (0,00–0,36) gestaucht, federt, die Kappe hüpft nach · HÖHEPUNKT „Aus — und wieder an": 0,45 alles aus ·
                                     0,60 Umriss · 0,75 Kappe · 0,90 Brille · 1,05 Grinsen · 1,17 Hof und ein kurzes Nicken · ruhig */
@keyframes qmp-flacker-zuenden { 0% { opacity: .07; } 12% { opacity: 1; } 30% { opacity: .3; } 46%, 100% { opacity: 1; } }
.qmp-flacker[data-akt="auftritt-1"] .qmp-akt { animation: qmp-flacker-a1-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-a1-bahn { 0%, 50% { transform: translateY(-125%); animation-timing-function: cubic-bezier(.45, 0, .9, .6); } 100% { transform: none; } }
.qmp-flacker[data-akt="auftritt-1"] .qmp-leben { animation: none; transform: scale(.93, 1.1); }
.qmp-flacker[data-akt="auftritt-1"] .qmp-flacker-r { animation: none; opacity: .07; }
.qmp-flacker[data-akt="auftritt-1"] .qmp-flacker-r1 { opacity: .34; }
.qmp-flacker[data-akt="auftritt-1"] .qmp-hof { animation: none; opacity: 0; }
/* der Aufschlag (auch im Jubel) */
@keyframes qmp-flacker-lande { 0% { transform: scale(1.2, .78); } 24% { transform: translateY(-5%) scale(.92, 1.11); } 48% { transform: scale(1.06, .95); } 72% { transform: scale(.99, 1.02); } 100% { transform: none; } }
@keyframes qmp-flacker-kappe { 0% { transform: translateY(5%) rotate(4deg); } 26% { transform: translateY(-9%) rotate(-12deg); } 52% { transform: translateY(1.6%) rotate(5deg); } 76% { transform: translateY(-1%) rotate(-2deg); } 100% { transform: none; } }
@keyframes qmp-flacker-arme { 0% { transform: translateY(6%) scale(1.06, .9); } 30% { transform: translateY(-4%) scale(.97, 1.08); } 60% { transform: translateY(1.4%); } 100% { transform: none; } }
.qmp-flacker[data-akt="auftritt-2"] .qmp-leben { animation: qmp-flacker-lande var(--qmp-d) ease-in-out 1 both; }
.qmp-flacker[data-akt="auftritt-2"] .qmp-arme { animation: qmp-flacker-arme var(--qmp-d) ease-in-out 1 both; }
.qmp-flacker[data-akt="auftritt-2"] .qmp-flacker-r1 { animation: qmp-flacker-zuenden calc(var(--qmp-d) * .4) linear 1 both; }
.qmp-flacker[data-akt="auftritt-2"] .qmp-flacker-r2 { animation: qmp-flacker-zuenden calc(var(--qmp-d) * .4) linear calc(var(--qmp-d) * .18) 1 both, qmp-flacker-kappe var(--qmp-d) ease-in-out 1 both; }
.qmp-flacker[data-akt="auftritt-2"] .qmp-flacker-r3 { animation: qmp-flacker-zuenden calc(var(--qmp-d) * .4) linear calc(var(--qmp-d) * .36) 1 both; }
.qmp-flacker[data-akt="auftritt-2"] .qmp-flacker-r4 { animation: qmp-flacker-zuenden calc(var(--qmp-d) * .4) linear calc(var(--qmp-d) * .54) 1 both; }
.qmp-flacker[data-akt="auftritt-2"] .qmp-hof { animation: qmp-flacker-hof-an var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-hof-an { 0%, 68% { opacity: 0; } 80% { opacity: 1; } 88% { opacity: .5; } 100% { opacity: .6; } }

/* JUBEL · Takt 1 — AUSHOLEN: zurücklehnen, sinken, Licht aus (Grinsen · Brille · Kappe · Umriss) */
.qmp-flacker[data-akt="jubel-1"] .qmp-leben { animation: qmp-flacker-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-flacker-j1 { 0% { transform: none; } 20% { transform: rotate(2deg) scale(.98, 1.03); } 100% { transform: rotate(-8deg) scale(1.1, .86); } }
@keyframes qmp-flacker-aus { 0% { opacity: 1; } 18% { opacity: .2; } 34% { opacity: .8; } 60%, 100% { opacity: .1; } }
.qmp-flacker[data-akt="jubel-1"] .qmp-flacker-r4 { animation: qmp-flacker-aus calc(var(--qmp-d) * .5) linear calc(var(--qmp-d) * .1) 1 both; }
.qmp-flacker[data-akt="jubel-1"] .qmp-flacker-r3 { animation: qmp-flacker-aus calc(var(--qmp-d) * .5) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-flacker[data-akt="jubel-1"] .qmp-flacker-r2 { animation: qmp-flacker-aus calc(var(--qmp-d) * .5) linear calc(var(--qmp-d) * .38) 1 both; }
.qmp-flacker[data-akt="jubel-1"] .qmp-flacker-r1 { animation: qmp-flacker-aus calc(var(--qmp-d) * .5) linear calc(var(--qmp-d) * .52) 1 both; }
.qmp-flacker[data-akt="jubel-1"] .qmp-hof { animation: qmp-flacker-hof-aus var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-hof-aus { 0% { opacity: .8; } 60%, 100% { opacity: 0; } }
/* JUBEL · Takt 2 — DER SALTO RÜCKWÄRTS, in vollem Licht */
.qmp-flacker[data-akt="jubel-2"] .qmp-akt { animation: qmp-flacker-j2-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-j2-bahn { 0% { transform: translateY(0) rotate(0deg); animation-timing-function: cubic-bezier(.14, .7, .3, 1); } 12% { transform: translateY(-11%) rotate(-14deg); animation-timing-function: cubic-bezier(.2, .5, .4, 1); }
  50% { transform: translateY(-31%) rotate(-170deg); animation-timing-function: linear; } 62% { transform: translateY(-31%) rotate(-236deg); animation-timing-function: cubic-bezier(.5, 0, .85, .6); } 88% { transform: translateY(-9%) rotate(-352deg); } 100% { transform: translateY(0) rotate(-360deg); } }
.qmp-flacker[data-akt="jubel-2"] .qmp-leben { animation: qmp-flacker-j2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-flacker-j2 { 0% { transform: rotate(-8deg) scale(1.1, .86); } 11% { transform: rotate(0deg) scale(.86, 1.18); } 34% { transform: scale(1.06, .92); } 66% { transform: scale(1.06, .92); } 100% { transform: scale(.92, 1.12); } }
.qmp-flacker[data-akt="jubel-2"] .qmp-flacker-r { animation: qmp-flacker-voll var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-voll { 0% { opacity: .1; } 8% { opacity: 1; } 12% { opacity: .4; } 16%, 100% { opacity: 1; } }
.qmp-flacker[data-akt="jubel-2"] .qmp-hof { animation: qmp-flacker-hof-voll var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-hof-voll { 0% { opacity: 0; } 10% { opacity: 1; } 30% { opacity: .6; } 50% { opacity: 1; } 70% { opacity: .6; } 100% { opacity: 1; } }
.qmp-flacker[data-akt="jubel-2"] .qmp-arme { animation: qmp-flacker-j2-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-flacker-j2-a { 0% { transform: translateY(5%) scale(.92); } 14% { transform: translateY(2%) scale(1, 1.1); } 50%, 66% { transform: scale(1.08); } 100% { transform: translateY(-4%) scale(1, 1.1); } }
/* JUBEL · Takt 3 — LANDUNG, dann der HÖHEPUNKT: Aus — und wieder an */
.qmp-flacker[data-akt="jubel-3"] .qmp-leben { animation: qmp-flacker-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-flacker-j3 { 0% { transform: scale(1.22, .76); } 7% { transform: translateY(-5%) scale(.92, 1.11); } 14% { transform: scale(1.06, .95); } 21% { transform: scale(.99, 1.02); } 27%, 74% { transform: none; } 80% { transform: rotate(-4deg) scale(1.07, 1.06); } 88% { transform: rotate(2deg) scale(.99, 1); } 100% { transform: rotate(-1.4deg); } }
.qmp-flacker[data-akt="jubel-3"] .qmp-arme { animation: qmp-flacker-arme calc(var(--qmp-d) * .3) ease-in-out 1 both; }
/* (zwei Bilder je Röhre: erst „aus bei 30 %", dann — sobald es anläuft — das Zünden; das spätere gilt, sobald es läuft) */
@keyframes qmp-flacker-j3-aus { 0%, 29.9% { opacity: 1; } 30%, 100% { opacity: .07; } }
.qmp-flacker[data-akt="jubel-3"] .qmp-flacker-r1 { animation: qmp-flacker-j3-aus var(--qmp-d) linear 1 both, qmp-flacker-zuenden calc(var(--qmp-d) * .14) linear calc(var(--qmp-d) * .4) 1 forwards; }
.qmp-flacker[data-akt="jubel-3"] .qmp-flacker-r2 { animation: qmp-flacker-j3-aus var(--qmp-d) linear 1 both, qmp-flacker-kappe calc(var(--qmp-d) * .3) ease-in-out 1 both, qmp-flacker-zuenden calc(var(--qmp-d) * .14) linear calc(var(--qmp-d) * .5) 1 forwards; }
.qmp-flacker[data-akt="jubel-3"] .qmp-flacker-r3 { animation: qmp-flacker-j3-aus var(--qmp-d) linear 1 both, qmp-flacker-zuenden calc(var(--qmp-d) * .14) linear calc(var(--qmp-d) * .6) 1 forwards; }
.qmp-flacker[data-akt="jubel-3"] .qmp-flacker-r4 { animation: qmp-flacker-j3-aus var(--qmp-d) linear 1 both, qmp-flacker-zuenden calc(var(--qmp-d) * .14) linear calc(var(--qmp-d) * .7) 1 forwards; }
.qmp-flacker[data-akt="jubel-3"] .qmp-hof { animation: qmp-flacker-j3-hof var(--qmp-d) linear 1 both; }
@keyframes qmp-flacker-j3-hof { 0%, 29% { opacity: 1; } 30%, 76% { opacity: 0; } 80% { opacity: 1; } 86% { opacity: .4; } 92%, 100% { opacity: .6; } }

/* ---------------- DIE SHOW · PRISMA (elegant: sie schwebt und dreht sich wie ein Stein im Licht) ----------------
   EINE DREHUNG IN DER TIEFE: Der Stein bleibt ein Stein (er wird nur ein wenig schmaler und wieder breit — die Facetten wandern). Das GESICHT wandert über ihn
   und verschwindet an seinem Rand (es liegt in seiner Form), die Facetten BLITZEN reihum (zwei Gruppen im Wechsel), die ZACKEN laufen um die Achse auf die
   andere Seite und zurück, die zwei Funkelsterne bleiben stehen. Die Bilder „eine Drehung" (qmp-prisma-t-…) laufen je Drehung einmal durch.
   AUFTRITT 1,5 s   Takt 1 (1,0 s)   0,24 sie schwebt von oben herab, immer langsamer, und dreht sich dabei einmal · 1,0 schwebt eine Handbreit über dem Sockel
                    Takt 2 (0,5 s)   0,17 setzt weich auf (alle Facetten blitzen) · eine kleine Verneigung · steht
   JUBEL 3,2 s      Takt 1 (0,55 s)  AUSHOLEN: ein Plié — sie sinkt, die Augen zu, dreht sich ein Stück zurück
                    Takt 2 (1,25 s)  DIE PIROUETTE: 0,10 hebt ab, gestreckt · 0,08–1,12 zwei Drehungen, schwebend (am höchsten 0,4–0,85) · 1,25 setzt weich auf
                    Takt 3 (1,4 s)   aufgesetzt (0,00–0,30) · der KNICKS (0,36–0,62) · HÖHEPUNKT (0,67–1,1): alle Facetten blitzen zugleich, der Regenbogen
                                     fegt durch den Stein, die Zacken spreizen sich · ruhig */
@keyframes qmp-prisma-t-gesicht { 0% { transform: translateX(0) scaleX(1); } 6.25% { transform: translateX(-5%) scaleX(.92); } 12.5% { transform: translateX(-9.2%) scaleX(.71); } 18.75% { transform: translateX(-12%) scaleX(.38); }
  25%, 75% { transform: translateX(-13%) scaleX(0); } 75.01% { transform: translateX(13%) scaleX(0); } 81.25% { transform: translateX(12%) scaleX(.38); } 87.5% { transform: translateX(9.2%) scaleX(.71); } 93.75% { transform: translateX(5%) scaleX(.92); } 100% { transform: translateX(0) scaleX(1); } }
@keyframes qmp-prisma-t-zacken { 0%, 100% { transform: scaleX(1); } 12.5% { transform: scaleX(.71); } 25% { transform: scaleX(0); } 37.5% { transform: scaleX(-.71); } 50% { transform: scaleX(-1); } 62.5% { transform: scaleX(-.71); } 75% { transform: scaleX(0); } 87.5% { transform: scaleX(.71); } }
@keyframes qmp-prisma-t-arme { 0%, 50%, 100% { transform: scaleX(1); opacity: 1; } 12.5%, 37.5%, 62.5%, 87.5% { transform: scaleX(.71); opacity: 1; } 21.99%, 28%, 71.99%, 78% { transform: scaleX(.3); opacity: 1; } 22%, 27.99%, 72%, 77.99% { transform: scaleX(.3); opacity: 0; } }
@keyframes qmp-prisma-t-f1 { 0%, 50%, 100% { opacity: .95; } 22%, 28%, 72%, 78% { opacity: 0; } }
@keyframes qmp-prisma-t-f3 { 0%, 3%, 47%, 53%, 97%, 100% { opacity: 0; } 25%, 75% { opacity: .95; } }
/* (der Stein wird in der Drehung ein wenig schmaler: je Drehung zweimal) */
@keyframes qmp-prisma-t-stein { 0%, 50%, 100% { transform: scale(1, 1.03); } 25%, 75% { transform: scale(.84, 1.05); } }
.qmp-prisma[data-akt] .qmp-prisma-zacken { transform-origin: 51.75% 50% !important; }
.qmp-prisma[data-akt] .qmp-prisma-saum2 { animation: none; opacity: 1; }

.qmp-prisma[data-akt="auftritt-1"] .qmp-akt { animation: qmp-prisma-a1-bahn var(--qmp-d) cubic-bezier(.16, .6, .3, 1) 1 both; }
@keyframes qmp-prisma-a1-bahn { 0%, 24% { transform: translateY(-125%) rotate(4deg); } 62% { transform: translateY(-22%) rotate(-3deg); } 100% { transform: translateY(-6%) rotate(0deg); } }
.qmp-prisma[data-akt="auftritt-1"] .qmp-leben { animation: qmp-prisma-t-stein calc(var(--qmp-d) * .72) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-prisma[data-akt="auftritt-1"] .qmp-gesicht { animation: qmp-prisma-t-gesicht calc(var(--qmp-d) * .72) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-prisma[data-akt="auftritt-1"] .qmp-prisma-zacken { animation: qmp-prisma-t-zacken calc(var(--qmp-d) * .72) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-prisma[data-akt="auftritt-1"] .qmp-arme { animation: qmp-prisma-t-arme calc(var(--qmp-d) * .72) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-prisma[data-akt="auftritt-1"] .qmp-prisma-f1 { animation: qmp-prisma-t-f1 calc(var(--qmp-d) * .72) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-prisma[data-akt="auftritt-1"] .qmp-prisma-f3 { animation: qmp-prisma-t-f3 calc(var(--qmp-d) * .72) linear calc(var(--qmp-d) * .24) 1 both; }
.qmp-prisma[data-akt="auftritt-1"] .qmp-prisma-regen { animation: qmp-prisma-fegen calc(var(--qmp-d) * .5) linear calc(var(--qmp-d) * .3) 1 both; }
/* weich aufsetzen und sich verneigen */
.qmp-prisma[data-akt="auftritt-2"] .qmp-akt { animation: qmp-prisma-a2-bahn var(--qmp-d) cubic-bezier(.4, 0, .5, 1) 1 both; }
@keyframes qmp-prisma-a2-bahn { 0% { transform: translateY(-6%); } 34%, 100% { transform: none; } }
.qmp-prisma[data-akt="auftritt-2"] .qmp-leben { animation: qmp-prisma-a2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-a2 { 0% { transform: scale(1, 1.03); } 30% { transform: scale(.98, 1.04); } 42% { transform: scale(1.07, .93); } 56% { transform: rotate(4deg) scale(.98, 1.03); } 72% { transform: rotate(10deg); } 86% { transform: rotate(10deg); } 100% { transform: none; } }
.qmp-prisma[data-akt="auftritt-2"] .qmp-prisma-blitz { animation: qmp-prisma-a2-b var(--qmp-d) ease-out 1 both; }
@keyframes qmp-prisma-a2-b { 0%, 32% { opacity: 0; } 38% { opacity: 1; } 70%, 100% { opacity: 0; } }
.qmp-prisma[data-akt="auftritt-2"] .qmp-prisma-zacken { animation: qmp-prisma-a2-z var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-a2-z { 0%, 30% { transform: none; } 44% { transform: translateY(3%) scale(1.05, .9); } 60% { transform: translateY(-2%) scale(.97, 1.08); } 100% { transform: none; } }

/* JUBEL · Takt 1 — AUSHOLEN: das Plié */
.qmp-prisma[data-akt="jubel-1"] .qmp-leben { animation: qmp-prisma-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-j1 { 0% { transform: none; } 22% { transform: scale(.98, 1.03); } 100% { transform: scale(1.09, .88); } }
.qmp-prisma[data-akt="jubel-1"] .qmp-gesicht { animation: qmp-prisma-j1-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-j1-g { 0%, 20% { transform: translateX(0) scaleX(1); } 100% { transform: translateX(5%) scaleX(.92); } }
.qmp-prisma[data-akt="jubel-1"] .qmp-prisma-zacken { animation: qmp-prisma-j1-z var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-j1-z { 0% { transform: scaleX(1); } 100% { transform: scaleX(.9) translateY(2%); } }
.qmp-prisma[data-akt="jubel-1"] .qmp-prisma-blitz { animation: none; opacity: 0; }
/* JUBEL · Takt 2 — DIE PIROUETTE: zwei Drehungen von 6 % bis 90 % */
.qmp-prisma[data-akt="jubel-2"] .qmp-akt { animation: qmp-prisma-j2-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-prisma-j2-bahn { 0% { transform: none; animation-timing-function: cubic-bezier(.2, .7, .3, 1); } 32% { transform: translateY(-25%); animation-timing-function: ease-in-out; } 50% { transform: translateY(-28%); animation-timing-function: ease-in-out; }
  68% { transform: translateY(-25%); animation-timing-function: cubic-bezier(.4, 0, .5, 1); } 100% { transform: none; } }
.qmp-prisma[data-akt="jubel-2"] .qmp-leben { animation: qmp-prisma-j2 calc(var(--qmp-d) * .08) ease-out 1 both, qmp-prisma-t-stein calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .08) 2 forwards; }
@keyframes qmp-prisma-j2 { 0% { transform: scale(1.09, .88); } 100% { transform: scale(1, 1.03); } }
.qmp-prisma[data-akt="jubel-2"] .qmp-gesicht { animation: qmp-prisma-j2-g calc(var(--qmp-d) * .06) linear 1 both, qmp-prisma-t-gesicht calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .06) 2 forwards; }
@keyframes qmp-prisma-j2-g { 0% { transform: translateX(5%) scaleX(.92); } 100% { transform: translateX(0) scaleX(1); } }
.qmp-prisma[data-akt="jubel-2"] .qmp-prisma-zacken { animation: qmp-prisma-t-zacken calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .06) 2 both; }
.qmp-prisma[data-akt="jubel-2"] .qmp-arme { animation: qmp-prisma-t-arme calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .06) 2 both; }
.qmp-prisma[data-akt="jubel-2"] .qmp-prisma-f1 { animation: qmp-prisma-t-f1 calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .06) 2 both; }
.qmp-prisma[data-akt="jubel-2"] .qmp-prisma-f3 { animation: qmp-prisma-t-f3 calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .06) 2 both; }
.qmp-prisma[data-akt="jubel-2"] .qmp-prisma-regen { animation: qmp-prisma-fegen calc(var(--qmp-d) * .42) linear calc(var(--qmp-d) * .06) 2 both; }
/* JUBEL · Takt 3 — aufgesetzt, der Knicks, dann der HÖHEPUNKT: alle Facetten zugleich */
.qmp-prisma[data-akt="jubel-3"] .qmp-leben { animation: qmp-prisma-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-j3 { 0% { transform: scale(1, 1.03); } 6% { transform: scale(1.08, .92); } 14% { transform: scale(.98, 1.03); } 22% { transform: none; } 32% { transform: rotate(12deg) scale(1.03, .95); } 42% { transform: rotate(12deg) scale(1.03, .95); }
  50% { transform: scale(1.02, .96); } 56% { transform: translateY(-3%) scale(1.09, 1.1); } 70% { transform: scale(.99, 1); } 84% { transform: scale(1.01, 1.01); } 100% { transform: none; } }
.qmp-prisma[data-akt="jubel-3"] .qmp-prisma-blitz { animation: qmp-prisma-j3-b var(--qmp-d) linear 1 both; }
@keyframes qmp-prisma-j3-b { 0%, 48% { opacity: 0; } 54% { opacity: 1; } 62% { opacity: .2; } 68% { opacity: .9; } 78% { opacity: .1; } 84% { opacity: .5; } 100% { opacity: 0; } }
.qmp-prisma[data-akt="jubel-3"] .qmp-prisma-weiss { animation: qmp-prisma-j3-w var(--qmp-d) ease-out 1 both; }
@keyframes qmp-prisma-j3-w { 0%, 48% { opacity: 0; } 54% { opacity: .8; } 70%, 100% { opacity: 0; } }
.qmp-prisma[data-akt="jubel-3"] .qmp-prisma-regen { animation: qmp-prisma-fegen calc(var(--qmp-d) * .34) ease-out calc(var(--qmp-d) * .52) 1 both; }
.qmp-prisma[data-akt="jubel-3"] .qmp-prisma-zacken { animation: qmp-prisma-j3-z var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-j3-z { 0% { transform: scale(1); } 7% { transform: translateY(3%) scale(1.05, .9); } 16% { transform: translateY(-2%) scale(.97, 1.08); } 26%, 48% { transform: none; } 56% { transform: translate(-1%, -2%) scale(1.1); } 70% { transform: scale(.97); } 84%, 100% { transform: none; } }
.qmp-prisma[data-akt="jubel-3"] .qmp-arme { animation: qmp-prisma-j3-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-prisma-j3-a { 0% { transform: translateY(-3%); } 8% { transform: translateY(4%) scale(1.05, .92); } 18% { transform: translateY(-2%); } 26%, 48% { transform: none; } 56% { transform: translateY(-5%) scale(1.14); } 72% { transform: scale(.98); } 86%, 100% { transform: none; } }

/* ---------------- DIE SHOW · FUNKEL (geheimnisvoll: sie schwebt aus ihrer Wiege) ----------------
   Ihr KÖRPER (Rumpf, Sternenhaut, Sternbild, Glanz, Gesicht, Arme — sechs Lagen, dieselbe Bewegung) kann die Mondwiege verlassen; die Wiege bleibt und schaukelt.
   AUFTRITT 1,6 s   Takt 1 (1,1 s)   0,29 sie kommt von oben rechts, in einem Bogen wie ein Mond, der untergeht, immer langsamer · 1,1 über der Insel
                    Takt 2 (0,5 s)   setzt weich auf, die Wiege schaukelt aus (rechts · links · rechts)
   JUBEL 3,3 s      Takt 1 (0,7 s)   AUSHOLEN: Die Wiege schaukelt sich auf — rechts · links · weit rechts —, die Sterne in ihrer Haut werden dunkel
                    Takt 2 (1,3 s)   SIE SCHWEBT AUS DER WIEGE: 0,00 ab · 0,60–0,80 hoch am Himmel, die Arme ausgebreitet, ihre Sterne strahlen ·
                                     1,30 zurück in der Wiege (die schaukelt solange leer)
   Takt 3 (1,3 s)   die Wiege FÄNGT sie (0,00): sackt und schwingt weit (links · rechts · links · rechts) · HÖHEPUNKT (0,2–0,85): die Sternschnuppe zieht
                                     durch ihre Haut · ruhig */
.qmp-funkel[data-akt="auftritt-1"] .qmp-akt { animation: qmp-funkel-a1-bahn var(--qmp-d) cubic-bezier(.2, .6, .4, 1) 1 both; }
@keyframes qmp-funkel-a1-bahn { 0%, 26% { transform: translateX(74%) rotate(24deg); } 100% { transform: translateX(0) rotate(-6deg); } }
.qmp-funkel[data-akt="auftritt-1"] .qmp-leben { animation: qmp-funkel-a1 var(--qmp-d) cubic-bezier(.45, .1, .5, 1) 1 both; }
@keyframes qmp-funkel-a1 { 0%, 26% { transform: translateY(-112%); } 100% { transform: translateY(-3%) scale(.98, 1.03); } }
.qmp-funkel[data-akt^="auftritt"] .qmp-funkel-hell { animation: qmp-funkel-ziehen 5s linear infinite; opacity: .9; }
.qmp-funkel[data-akt="auftritt-2"] .qmp-akt { animation: qmp-funkel-a2-bahn var(--qmp-d) ease-out 1 both; }
@keyframes qmp-funkel-a2-bahn { 0% { transform: rotate(-6deg); } 40%, 100% { transform: none; } }
.qmp-funkel[data-akt="auftritt-2"] .qmp-leben { animation: qmp-funkel-a2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-a2 { 0% { transform: translateY(-3%) scale(.98, 1.03); } 16% { transform: scale(1.07, .92); } 34% { transform: rotate(8deg) scale(.99, 1.02); } 58% { transform: rotate(-5deg); } 80% { transform: rotate(2deg); } 100% { transform: rotate(-2.6deg); } }
.qmp-funkel[data-akt="auftritt-2"] .qmp-funkel-wiege { animation: qmp-funkel-a2-w var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-a2-w { 0% { transform: none; } 20% { transform: rotate(-5deg) scale(1.04, .95); } 46% { transform: rotate(4deg); } 72% { transform: rotate(-2deg); } 100% { transform: none; } }

/* JUBEL · Takt 1 — AUSHOLEN: die Wiege schaukelt sich auf */
.qmp-funkel[data-akt="jubel-1"] .qmp-leben { animation: qmp-funkel-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-j1 { 0% { transform: rotate(-2.6deg); } 22% { transform: rotate(8deg); } 50% { transform: rotate(-12deg); } 78% { transform: rotate(15deg) scale(1.02, .98); } 100% { transform: rotate(0deg) scale(1.07, .92); } }
.qmp-funkel[data-akt="jubel-1"] .qmp-funkel-sterne { animation: qmp-funkel-ziehen 5s linear infinite, qmp-funkel-dunkel var(--qmp-d) ease-in 1 both; }
@keyframes qmp-funkel-dunkel { 0% { opacity: 1; } 100% { opacity: .25; } }
.qmp-funkel[data-akt="jubel-1"] .qmp-funkel-bild { animation: none; opacity: 0; }
.qmp-funkel[data-akt="jubel-1"] .qmp-hof { animation: qmp-funkel-dunkel var(--qmp-d) ease-in 1 both; }
/* JUBEL · Takt 2 — SIE SCHWEBT AUS DER WIEGE */
.qmp-funkel[data-akt="jubel-2"] :is(.qmp-koerper, .qmp-funkel-haut, .qmp-funkel-bild, .qmp-davor, .qmp-gesicht, .qmp-arme) { animation: qmp-funkel-j2-k var(--qmp-d) linear 1 both; }
@keyframes qmp-funkel-j2-k { 0% { transform: translateY(2.4%) rotate(0deg); animation-timing-function: cubic-bezier(.2, .7, .3, 1); } 46% { transform: translateY(-48%) rotate(-9deg); animation-timing-function: ease-in-out; }
  54% { transform: translateY(-51%) rotate(0deg); animation-timing-function: ease-in-out; } 62% { transform: translateY(-48%) rotate(8deg); animation-timing-function: cubic-bezier(.5, 0, .6, 1); } 100% { transform: translateY(2.4%) rotate(0deg); } }
.qmp-funkel[data-akt="jubel-2"] .qmp-leben { animation: qmp-funkel-j2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-j2 { 0% { transform: scale(1.07, .92); } 10% { transform: rotate(-7deg) scale(.98, 1.03); } 28% { transform: rotate(5deg); } 46% { transform: rotate(-3deg); } 64% { transform: rotate(2deg); } 84%, 100% { transform: none; } }
.qmp-funkel[data-akt="jubel-2"] .qmp-hof { animation: qmp-funkel-j2-hof var(--qmp-d) linear 1 both; }
@keyframes qmp-funkel-j2-hof { 0% { opacity: .25; } 10%, 90% { opacity: 0; } 100% { opacity: .8; } }
.qmp-funkel[data-akt="jubel-2"] .qmp-funkel-hell { animation: qmp-funkel-ziehen 5s linear infinite, qmp-funkel-j2-hell var(--qmp-d) linear 1 both; }
@keyframes qmp-funkel-j2-hell { 0% { opacity: 0; } 30%, 100% { opacity: 1; } }
.qmp-funkel[data-akt="jubel-2"] .qmp-funkel-nebel { animation: qmp-funkel-nebel .6s ease-in-out infinite; }
/* JUBEL · Takt 3 — die Wiege FÄNGT sie und schwingt weit; der HÖHEPUNKT: die Sternschnuppe durch ihre Haut */
.qmp-funkel[data-akt="jubel-3"] .qmp-leben { animation: qmp-funkel-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-j3 { 0% { transform: translateY(1.5%) scale(1.1, .89); } 12% { transform: rotate(-14deg) scale(.98, 1.03); } 34% { transform: rotate(11deg); } 54% { transform: rotate(-7deg); } 72% { transform: rotate(4deg); } 88% { transform: rotate(-3.4deg); } 100% { transform: rotate(-2.6deg); } }
.qmp-funkel[data-akt="jubel-3"] :is(.qmp-koerper, .qmp-funkel-haut, .qmp-funkel-bild, .qmp-davor, .qmp-gesicht, .qmp-arme) { animation: qmp-funkel-j3-k var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-j3-k { 0% { transform: translateY(2.4%); } 12% { transform: translateY(-1.6%); } 26% { transform: translateY(.8%); } 40%, 100% { transform: none; } }
.qmp-funkel[data-akt="jubel-3"] .qmp-funkel-wiege { animation: qmp-funkel-j3-w var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-funkel-j3-w { 0% { transform: scale(1.05, .94); } 14% { transform: rotate(-5deg); } 36% { transform: rotate(4deg); } 58% { transform: rotate(-2deg); } 80%, 100% { transform: none; } }
.qmp-funkel[data-akt="jubel-3"] .qmp-funkel-schnuppe { animation: qmp-funkel-schnuppe calc(var(--qmp-d) * .5) linear calc(var(--qmp-d) * .16) 1 both; }
.qmp-funkel[data-akt="jubel-3"] .qmp-funkel-hell { animation: qmp-funkel-ziehen 5s linear infinite, qmp-funkel-j3-hell var(--qmp-d) linear 1 both; }
@keyframes qmp-funkel-j3-hell { 0%, 60% { opacity: 1; } 100% { opacity: 0; } }

/* ---------------- DIE SHOW · BOMMEL (lässig: er rollt und hüpft wie ein Ball aus Wolle) ----------------
   AUFTRITT 1,5 s   Takt 1 (1,0 s)   0,16 er ROLLT von rechts herein (am Boden, eine halbe Umdrehung) · 0,62 neben dem Hocker · ein fauler Hüpfer · 1,0 landet darauf
                    Takt 2 (0,5 s)   sackt in den Hocker, federt, der Bommel schlägt nach vorn und zurück, Streifen und Bommel leuchten einmal auf
   JUBEL 3,0 s      Takt 1 (0,5 s)   AUSHOLEN: Er sinkt tief in den Hocker und lehnt sich zurück, der Bommel hängt, die Lichter werden matt
                    Takt 2 (1,3 s)   DREI HÜPFER: klein (0,00–0,30) · größer (0,30–0,70) · der dritte hoch (0,70–1,30, Scheitel bei 1,0) mit einer faulen
                                     Rolle rückwärts in der Luft; bei jeder Landung staucht er, der Bommel läuft nach
                    Takt 3 (1,2 s)   LANDUNG (0,00–0,48) tief gestaucht, wackelt aus wie Pudding · HÖHEPUNKT (0,48–1,08): Der Bommel dreht seine Runde und
                                     hüpft, Streifen und Bommel blitzen dreimal zusammen · ruhig */
.qmp-bommel[data-akt="auftritt-1"] .qmp-akt { animation: qmp-bommel-a1-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-bommel-a1-bahn { 0%, 16% { transform: translate(130%, 13%) rotate(240deg); animation-timing-function: cubic-bezier(.3, .4, .5, 1); } 62% { transform: translate(40%, 13%) rotate(66deg); animation-timing-function: cubic-bezier(.2, .7, .4, 1); }
  82% { transform: translate(15%, -20%) rotate(18deg); animation-timing-function: cubic-bezier(.5, 0, .9, .6); } 100% { transform: translate(0, 0) rotate(0deg); } }
.qmp-bommel[data-akt="auftritt-1"] .qmp-leben { animation: qmp-bommel-a1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-a1 { 0%, 56% { transform: scale(1.03, .97); } 62% { transform: scale(1.12, .86); } 70% { transform: scale(.9, 1.13); } 84% { transform: scale(1, 1); } 100% { transform: scale(.92, 1.1); } }
.qmp-bommel[data-akt="auftritt-1"] .qmp-bommel-bommel, .qmp-bommel[data-akt="auftritt-1"] .qmp-bommel-l2 { animation: qmp-bommel-a1-b var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-a1-b { 0%, 16% { transform: rotate(26deg); } 40% { transform: rotate(34deg) translateY(2%); } 62% { transform: rotate(-20deg); } 82% { transform: rotate(22deg) translateY(-3%); } 100% { transform: rotate(-10deg) translateY(-2%); } }
/* in den Hocker sacken (auch im Jubel): gestaucht — federt — wackelt aus; der Bommel schlägt nach */
@keyframes qmp-bommel-lande { 0% { transform: scale(1.22, .76); } 24% { transform: translateY(-4%) scale(.92, 1.1); } 46% { transform: scale(1.08, .93); } 66% { transform: scale(.97, 1.03); } 84% { transform: scale(1.02, .99); } 100% { transform: none; } }
@keyframes qmp-bommel-lande-b { 0% { transform: translateY(7%) rotate(36deg) scale(1.1, .86); } 26% { transform: translateY(-5%) rotate(-22deg) scale(.96, 1.08); } 50% { transform: translateY(1%) rotate(12deg); } 74% { transform: rotate(-8deg); } 100% { transform: translateX(-1.4%) rotate(-12deg); } }
@keyframes qmp-bommel-lande-g { 0% { transform: translateY(4%); } 28% { transform: translateY(-2.2%); } 56% { transform: translateY(.8%); } 100% { transform: none; } }
@keyframes qmp-bommel-auf { 0% { opacity: 1; } 40% { opacity: 1; } 100% { opacity: .5; } }
.qmp-bommel[data-akt="auftritt-2"] .qmp-leben { animation: qmp-bommel-lande var(--qmp-d) ease-in-out 1 both; }
.qmp-bommel[data-akt="auftritt-2"] .qmp-bommel-bommel, .qmp-bommel[data-akt="auftritt-2"] .qmp-bommel-l2 { animation: qmp-bommel-lande-b var(--qmp-d) ease-in-out 1 both; }
.qmp-bommel[data-akt="auftritt-2"] .qmp-gesicht, .qmp-bommel[data-akt="auftritt-2"] .qmp-arme { animation: qmp-bommel-lande-g var(--qmp-d) ease-in-out 1 both; }
.qmp-bommel[data-akt="auftritt-2"] .qmp-bommel-l1 { animation: qmp-bommel-auf var(--qmp-d) linear 1 both; }
.qmp-bommel[data-akt="auftritt-2"] .qmp-bommel-l2 { opacity: .6; }
.qmp-bommel[data-akt="auftritt-2"] .qmp-bommel-faden { animation: qmp-bommel-faden var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-faden { 0% { transform: rotate(-18deg) scale(1.1, .9); } 30% { transform: rotate(14deg); } 60% { transform: rotate(-8deg); } 100% { transform: none; } }

/* JUBEL · Takt 1 — AUSHOLEN: tief in den Hocker */
.qmp-bommel[data-akt="jubel-1"] .qmp-leben { animation: qmp-bommel-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j1 { 0% { transform: none; } 20% { transform: scale(.98, 1.03); } 100% { transform: rotate(-5deg) scale(1.16, .78); } }
.qmp-bommel[data-akt="jubel-1"] .qmp-bommel-bommel, .qmp-bommel[data-akt="jubel-1"] .qmp-bommel-l2 { animation: qmp-bommel-j1-b var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j1-b { 0% { transform: rotate(-12deg); } 30% { transform: rotate(10deg) translateY(-2%); } 100% { transform: rotate(-34deg) translate(-2%, 5%); } }
.qmp-bommel[data-akt="jubel-1"] .qmp-bommel-l1 { animation: qmp-bommel-matt var(--qmp-d) ease-in 1 both; }
.qmp-bommel[data-akt="jubel-1"] .qmp-bommel-l2 { animation: qmp-bommel-j1-b var(--qmp-d) ease-in-out 1 both, qmp-bommel-matt var(--qmp-d) ease-in 1 both; }
@keyframes qmp-bommel-matt { 0% { opacity: .8; } 100% { opacity: .12; } }
.qmp-bommel[data-akt="jubel-1"] .qmp-gesicht, .qmp-bommel[data-akt="jubel-1"] .qmp-arme { animation: qmp-bommel-j1-g var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j1-g { 0% { transform: none; } 100% { transform: translateY(3%); } }
/* JUBEL · Takt 2 — DREI HÜPFER (Landungen bei 23 % und 54 %; der dritte: Scheitel bei 77 %, die Rolle von 58 % bis 96 %) */
.qmp-bommel[data-akt="jubel-2"] .qmp-akt { animation: qmp-bommel-j2-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-bommel-j2-bahn { 0% { transform: translateY(0) rotate(0deg); animation-timing-function: cubic-bezier(.2, .7, .4, 1); } 11.5% { transform: translateY(-12%) rotate(0deg); animation-timing-function: cubic-bezier(.6, 0, .8, .3); }
  23% { transform: translateY(0) rotate(0deg); animation-timing-function: cubic-bezier(.2, .7, .4, 1); } 38.5% { transform: translateY(-24%) rotate(0deg); animation-timing-function: cubic-bezier(.6, 0, .8, .3); }
  54% { transform: translateY(0) rotate(0deg); animation-timing-function: cubic-bezier(.2, .7, .4, 1); } 60% { transform: translateY(-15%) rotate(-12deg); animation-timing-function: cubic-bezier(.3, .5, .5, 1); }
  77% { transform: translateY(-34%) rotate(-180deg); animation-timing-function: cubic-bezier(.5, 0, .7, .5); } 94% { transform: translateY(-8%) rotate(-350deg); animation-timing-function: linear; } 100% { transform: translateY(0) rotate(-360deg); } }
.qmp-bommel[data-akt="jubel-2"] .qmp-leben { animation: qmp-bommel-j2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j2 { 0% { transform: rotate(-5deg) scale(1.16, .78); } 4% { transform: scale(.9, 1.14); } 11.5% { transform: scale(1, 1); } 21% { transform: scale(.94, 1.08); } 23% { transform: scale(1.18, .8); } 27% { transform: scale(.9, 1.14); }
  38.5% { transform: scale(1.02, .98); } 52% { transform: scale(.93, 1.1); } 54% { transform: scale(1.24, .74); } 59% { transform: scale(.86, 1.2); } 70% { transform: scale(1.04, .95); } 86% { transform: scale(1.04, .95); } 100% { transform: scale(.92, 1.12); } }
.qmp-bommel[data-akt="jubel-2"] .qmp-bommel-bommel, .qmp-bommel[data-akt="jubel-2"] .qmp-bommel-l2 { animation: qmp-bommel-j2-b var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j2-b { 0% { transform: rotate(-34deg) translate(-2%, 5%); } 7% { transform: translateY(5%) scale(1.06, .86); } 14% { transform: translateY(-5%) rotate(14deg) scale(.96, 1.1); } 23% { transform: translateY(5%) rotate(-12deg) scale(1.1, .84); }
  30% { transform: translateY(5%) scale(1.06, .86); } 41% { transform: translateY(-7%) rotate(-18deg) scale(.95, 1.12); } 54% { transform: translateY(7%) rotate(16deg) scale(1.12, .82); } 62% { transform: translateY(6%) scale(1.04, .84); }
  80% { transform: translateY(-9%) rotate(24deg) scale(.94, 1.16); } 100% { transform: translateY(-4%) rotate(-10deg) scale(.96, 1.1); } }
.qmp-bommel[data-akt="jubel-2"] .qmp-bommel-l1 { animation: qmp-bommel-j2-l1 var(--qmp-d) linear 1 both; }
@keyframes qmp-bommel-j2-l1 { 0% { opacity: .12; } 3% { opacity: 1; } 18% { opacity: .2; } 24% { opacity: 1; } 46% { opacity: .2; } 55% { opacity: 1; } 100% { opacity: 1; } }
.qmp-bommel[data-akt="jubel-2"] .qmp-bommel-l2 { opacity: .55; }
.qmp-bommel[data-akt="jubel-2"] .qmp-arme { animation: qmp-bommel-j2-a var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j2-a { 0% { transform: translateY(4%) scale(.9); } 11.5% { transform: translateY(-3%) scale(1.06); } 23% { transform: translateY(5%) scale(1, .9); } 38.5% { transform: translateY(-4%) scale(1.1); } 54% { transform: translateY(6%) scale(1, .88); } 77% { transform: translateY(-3%) scale(1.14); } 100% { transform: translateY(-5%) scale(1, 1.1); } }
/* JUBEL · Takt 3 — LANDUNG, auswackeln; dann der HÖHEPUNKT: der Bommel dreht seine Runde, die Lichter blitzen dreimal */
.qmp-bommel[data-akt="jubel-3"] .qmp-leben { animation: qmp-bommel-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j3 { 0% { transform: scale(1.28, .7); } 8% { transform: translateY(-5%) scale(.9, 1.13); } 16% { transform: scale(1.12, .9); } 24% { transform: scale(.95, 1.06); } 32% { transform: scale(1.04, .97); } 40% { transform: none; }
  46% { transform: scale(1.07, .92); } 62% { transform: translateY(-4%) scale(.96, 1.05); } 80% { transform: scale(1.03, .97); } 90% { transform: rotate(-3deg); } 100% { transform: none; } }
.qmp-bommel[data-akt="jubel-3"] .qmp-bommel-bommel, .qmp-bommel[data-akt="jubel-3"] .qmp-bommel-l2 { animation: qmp-bommel-j3-b var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-bommel-j3-b { 0% { transform: translateY(8%) rotate(36deg) scale(1.12, .84); } 9% { transform: translateY(-6%) rotate(-24deg) scale(.95, 1.1); } 20% { transform: translateY(1%) rotate(14deg); } 32% { transform: rotate(-8deg); } 40% { transform: translateY(0) rotate(0deg); }
  46% { transform: translateY(3%) rotate(-24deg); } 64% { transform: translateY(-16%) rotate(200deg); } 82% { transform: translateY(1%) rotate(374deg); } 100% { transform: translateX(-1.4%) rotate(348deg); } }
.qmp-bommel[data-akt="jubel-3"] .qmp-bommel-l1 { animation: qmp-bommel-j3-l var(--qmp-d) linear 1 both; }
.qmp-bommel[data-akt="jubel-3"] .qmp-bommel-l2 { animation: qmp-bommel-j3-b var(--qmp-d) ease-in-out 1 both, qmp-bommel-j3-l2 var(--qmp-d) linear 1 both; }
@keyframes qmp-bommel-j3-l2 { 0% { opacity: .55; } 12% { opacity: .1; } 44% { opacity: .1; } 48% { opacity: .7; } 56% { opacity: .1; } 62% { opacity: .7; } 70% { opacity: .1; } 76% { opacity: .7; } 100% { opacity: .1; } }
@keyframes qmp-bommel-j3-l { 0% { opacity: 1; } 12% { opacity: .3; } 44% { opacity: .2; } 48% { opacity: 1; } 56% { opacity: .15; } 62% { opacity: 1; } 70% { opacity: .15; } 76% { opacity: 1; } 100% { opacity: .6; } }
.qmp-bommel[data-akt="jubel-3"] .qmp-gesicht, .qmp-bommel[data-akt="jubel-3"] .qmp-arme { animation: qmp-bommel-lande-g calc(var(--qmp-d) * .4) ease-in-out 1 both; }
.qmp-bommel[data-akt="jubel-3"] .qmp-bommel-faden { animation: qmp-bommel-faden calc(var(--qmp-d) * .4) ease-in-out 1 both; }

/* ---------------- DIE SHOW · SCHNURRI (süß: eine Katze springt) ----------------
   AUFTRITT 1,5 s   Takt 1 (1,0 s)   0,30 sie springt von links oben herein, lang gestreckt, in einem Bogen (am höchsten bei 0,58) · 1,0 landet
                    Takt 2 (0,5 s)   landet weich im Kissen: gestaucht, federt; das Köpfchen nickt nach, der Schweif schlägt aus
   JUBEL 3,4 s      Takt 1 (1,0 s)   AUSHOLEN, das SPRUNG-WACKELN: 0,12 Kopf tief zwischen die Pfoten, Ohren angelegt, Hintern und Schweif hoch, Pupillen
                                     riesig · drei Wackler (0,28 · 0,44 · 0,60 · 0,76) · sie spannt sich
                    Takt 2 (1,1 s)   DER SATZ nach dem Wollknäuel: 0,11 ab, lang gestreckt · 0,50 am höchsten, rechts oben — die Pfote schlägt zu (0,45–0,62)
                                     · 1,1 landet wieder im Kissen
                    Takt 3 (1,3 s)   LANDUNG (0,00–0,40) gestaucht, federt · sie SCHNURRT (0,47–0,83): ein Zittern, das Köpfchen wiegt, die Ohren zucken ·
                                     reckt sich einmal stolz · ruhig */
.qmp-katze[data-akt] .qmp-katze-putz, .qmp-katze[data-akt] .qmp-katze-zunge, .qmp-katze[data-akt] .qmp-katze-lid, .qmp-katze[data-akt] .qmp-katze-auf,
.qmp-katze[data-akt] .qmp-katze-pl, .qmp-katze[data-akt] .qmp-katze-pr, .qmp-katze[data-akt] .qmp-katze-ol, .qmp-katze[data-akt] .qmp-katze-or, .qmp-katze[data-akt] .qmp-katze-kopf { animation: none; }
.qmp-katze[data-akt="auftritt-1"] .qmp-akt { animation: qmp-katze-a1-bahn var(--qmp-d) cubic-bezier(.3, .5, .6, 1) 1 both; }
@keyframes qmp-katze-a1-bahn { 0%, 30% { transform: translateX(-112%) rotate(-30deg); } 70% { transform: translateX(-22%) rotate(-4deg); } 100% { transform: translateX(0) rotate(10deg); } }
.qmp-katze[data-akt="auftritt-1"] .qmp-leben { animation: qmp-katze-a1 var(--qmp-d) linear 1 both; }
@keyframes qmp-katze-a1 { 0%, 30% { transform: translateY(-44%) scale(1.14, .88); animation-timing-function: cubic-bezier(.2, .6, .4, 1); } 58% { transform: translateY(-62%) scale(1.12, .9); animation-timing-function: cubic-bezier(.5, 0, .85, .6); } 100% { transform: translateY(0) scale(.93, 1.1); } }
.qmp-katze[data-akt="auftritt-1"] .qmp-katze-schweif { animation: qmp-katze-a1-s var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-a1-s { 0%, 30% { transform: rotate(-34deg) scale(1.08); } 62% { transform: rotate(-16deg) scale(1.08); } 100% { transform: rotate(40deg) scale(1.08); } }
/* weich landen (auch im Jubel) */
@keyframes qmp-katze-lande { 0% { transform: scale(1.2, .8); } 24% { transform: translateY(-4%) scale(.93, 1.1); } 48% { transform: scale(1.05, .96); } 72% { transform: scale(.99, 1.02); } 100% { transform: none; } }
@keyframes qmp-katze-lande-k { 0% { transform: translateY(5%) rotate(4deg) scale(1.03, .96); } 26% { transform: translateY(-3.4%) rotate(4deg); } 54% { transform: translateY(.6%) rotate(4deg); } 100% { transform: translateY(-.9%) rotate(4deg); } }
@keyframes qmp-katze-lande-s { 0% { transform: rotate(40deg) scale(1.08); } 30% { transform: rotate(-10deg) scale(1.08); } 60% { transform: rotate(22deg) scale(1.08); } 100% { transform: rotate(14deg) scale(1.08); } }
@keyframes qmp-katze-lande-ol { 0% { transform: rotate(-30deg) scale(1, .8); } 30% { transform: rotate(8deg); } 60% { transform: rotate(-5deg); } 100% { transform: none; } }
@keyframes qmp-katze-lande-or { 0% { transform: rotate(30deg) scale(1, .8); } 30% { transform: rotate(-8deg); } 60% { transform: rotate(5deg); } 100% { transform: none; } }
.qmp-katze[data-akt="auftritt-2"] .qmp-akt { animation: qmp-katze-a2-bahn var(--qmp-d) ease-out 1 both; }
@keyframes qmp-katze-a2-bahn { 0% { transform: rotate(10deg); } 36%, 100% { transform: none; } }
.qmp-katze[data-akt="auftritt-2"] .qmp-leben { animation: qmp-katze-lande var(--qmp-d) ease-in-out 1 both; }
.qmp-katze[data-akt="auftritt-2"] .qmp-katze-kopf { animation: qmp-katze-lande-k var(--qmp-d) ease-in-out 1 both; }
.qmp-katze[data-akt="auftritt-2"] .qmp-katze-schweif { animation: qmp-katze-lande-s var(--qmp-d) ease-in-out 1 both; }
.qmp-katze[data-akt="auftritt-2"] .qmp-katze-ol { animation: qmp-katze-lande-ol var(--qmp-d) ease-in-out 1 both; }
.qmp-katze[data-akt="auftritt-2"] .qmp-katze-or { animation: qmp-katze-lande-or var(--qmp-d) ease-in-out 1 both; }

/* JUBEL · Takt 1 — AUSHOLEN: das Sprung-Wackeln */
.qmp-katze[data-akt="jubel-1"] .qmp-leben { animation: qmp-katze-j1 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j1 { 0% { transform: none; } 12% { transform: scale(1.03, .97); } 90%, 100% { transform: scale(1.06, .93); } }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-kopf { animation: qmp-katze-j1-kopf var(--qmp-d) cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-j1-kopf { 0% { transform: none; } 12% { transform: translateY(11%) scale(1.04, .95); } 28% { transform: translate(1.4%, 11%) rotate(3deg) scale(1.04, .95); } 44% { transform: translate(-1.4%, 11%) rotate(-3deg) scale(1.04, .95); }
  60% { transform: translate(1.4%, 11%) rotate(3deg) scale(1.04, .95); } 76% { transform: translate(-1.4%, 11%) rotate(-3deg) scale(1.04, .95); } 90%, 100% { transform: translateY(11.6%) scale(1.05, .94); } }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-rumpf { animation: qmp-katze-j1-heck var(--qmp-d) cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-j1-heck { 0% { transform: none; } 12% { transform: translateY(-36%) scale(1.42, 1.3); } 28% { transform: translate(-10%, -36%) rotate(-13deg) scale(1.42, 1.3); } 44% { transform: translate(10%, -36%) rotate(13deg) scale(1.42, 1.3); }
  60% { transform: translate(-10%, -36%) rotate(-13deg) scale(1.42, 1.3); } 76% { transform: translate(10%, -36%) rotate(13deg) scale(1.42, 1.3); } 90%, 100% { transform: translateY(-34%) scale(1.42, 1.3); } }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-schweif { animation: qmp-katze-j1-schweif var(--qmp-d) cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-j1-schweif { 0% { transform: none; } 12% { transform: translate(9%, -44%) rotate(62deg); } 28% { transform: translate(-1%, -44%) rotate(46deg); } 44% { transform: translate(19%, -44%) rotate(78deg); }
  60% { transform: translate(-1%, -44%) rotate(46deg); } 76% { transform: translate(19%, -44%) rotate(78deg); } 90%, 100% { transform: translate(9%, -42%) rotate(62deg); } }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-ol { animation: qmp-katze-j1-ol var(--qmp-d) cubic-bezier(.4, 0, .3, 1) 1 both; }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-or { animation: qmp-katze-j1-or var(--qmp-d) cubic-bezier(.4, 0, .3, 1) 1 both; }
@keyframes qmp-katze-j1-ol { 0% { transform: none; } 12%, 100% { transform: translate(-2.5%, 9%) rotate(-62deg) scale(1, .74); } }
@keyframes qmp-katze-j1-or { 0% { transform: none; } 12%, 100% { transform: translate(2.5%, 9%) rotate(62deg) scale(1, .74); } }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-gross { animation: qmp-katze-j1-gross var(--qmp-d) linear 1 both; }
@keyframes qmp-katze-j1-gross { 0%, 6% { opacity: 0; } 10%, 100% { opacity: 1; } }
.qmp-katze[data-akt="jubel-1"] .qmp-katze-s1, .qmp-katze[data-akt="jubel-1"] .qmp-katze-s2, .qmp-katze[data-akt="jubel-1"] .qmp-katze-s3 { animation-duration: .4s; }
/* JUBEL · Takt 2 — DER SATZ nach dem Wollknäuel (rechts oben), die Pfote schlägt zu */
.qmp-katze[data-akt="jubel-2"] .qmp-akt { animation: qmp-katze-j2-bahn var(--qmp-d) linear 1 both; }
@keyframes qmp-katze-j2-bahn { 0% { transform: translate(0, 0) rotate(0deg); animation-timing-function: ease-in-out; } 10% { transform: translate(-3%, 2%) rotate(-8deg); animation-timing-function: cubic-bezier(.14, .7, .3, 1); }
  46% { transform: translate(26%, -36%) rotate(16deg); animation-timing-function: ease-in-out; } 58% { transform: translate(28%, -35%) rotate(2deg); animation-timing-function: cubic-bezier(.5, 0, .8, .6); } 100% { transform: translate(0, 0) rotate(0deg); } }
.qmp-katze[data-akt="jubel-2"] .qmp-leben { animation: qmp-katze-j2 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j2 { 0% { transform: scale(1.06, .93); } 10% { transform: scale(1.16, .8); } 22% { transform: scale(.84, 1.22); } 46% { transform: scale(.98, 1.03); } 60% { transform: scale(1.04, .97); } 100% { transform: scale(.92, 1.1); } }
.qmp-katze[data-akt="jubel-2"] .qmp-katze-kopf { animation: qmp-katze-j2-kopf var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j2-kopf { 0% { transform: translateY(11.6%) scale(1.05, .94); } 12% { transform: translateY(-4%) rotate(4deg); } 26% { transform: translateY(-.9%) rotate(4deg); } 46% { transform: translateY(-2%) rotate(12deg); } 62% { transform: translateY(-.9%) rotate(-4deg); } 100% { transform: translateY(-2%) rotate(4deg); } }
.qmp-katze[data-akt="jubel-2"] .qmp-katze-rumpf { animation: qmp-katze-j2-heck var(--qmp-d) ease-out 1 both; }
@keyframes qmp-katze-j2-heck { 0% { transform: translateY(-34%) scale(1.42, 1.3); } 12%, 100% { transform: none; } }
.qmp-katze[data-akt="jubel-2"] .qmp-katze-schweif { animation: qmp-katze-j2-schweif var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j2-schweif { 0% { transform: translate(9%, -42%) rotate(62deg); } 14% { transform: rotate(-26deg) scale(1.08); } 40% { transform: rotate(-12deg) scale(1.08); } 62% { transform: rotate(34deg) scale(1.08); } 100% { transform: rotate(40deg) scale(1.08); } }
.qmp-katze[data-akt="jubel-2"] .qmp-katze-ol { animation: qmp-katze-j2-ol var(--qmp-d) ease-out 1 both; }
.qmp-katze[data-akt="jubel-2"] .qmp-katze-or { animation: qmp-katze-j2-or var(--qmp-d) ease-out 1 both; }
@keyframes qmp-katze-j2-ol { 0% { transform: translate(-2.5%, 9%) rotate(-62deg) scale(1, .74); } 14% { transform: rotate(6deg); } 30%, 80% { transform: rotate(-14deg) scale(1, .9); } 100% { transform: rotate(-30deg) scale(1, .8); } }
@keyframes qmp-katze-j2-or { 0% { transform: translate(2.5%, 9%) rotate(62deg) scale(1, .74); } 14% { transform: rotate(-6deg); } 30%, 80% { transform: rotate(14deg) scale(1, .9); } 100% { transform: rotate(30deg) scale(1, .8); } }
/* die Pfote, die zuschlägt (die Putzpfote der Ruhe-Schleife — sonst unsichtbar): hoch — und quer nach rechts */
.qmp-katze[data-akt="jubel-2"] .qmp-katze-putz { animation: qmp-katze-j2-pfote var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j2-pfote { 0%, 30% { opacity: 0; transform: translateY(7%) scale(.7, .25); } 31% { opacity: 1; transform: translateY(7%) scale(.7, .25); } 40% { opacity: 1; transform: rotate(-14deg) scale(1, 1.2); } 47% { opacity: 1; transform: translateY(-4%) rotate(46deg) scale(1.1, 1.6); }
  56% { opacity: 1; transform: translateY(-2%) rotate(64deg) scale(1.05, 1.4); } 68% { opacity: 1; transform: rotate(10deg) scale(1, 1.1); } 78% { opacity: 1; transform: translateY(7%) scale(.7, .25); } 79%, 100% { opacity: 0; transform: translateY(7%) scale(.7, .25); } }
.qmp-katze[data-akt="jubel-2"] .qmp-katze-pr { animation: qmp-katze-j2-pr var(--qmp-d) linear 1 both; }
@keyframes qmp-katze-j2-pr { 0%, 30% { opacity: 1; } 31%, 78% { opacity: 0; } 79%, 100% { opacity: 1; } }
/* JUBEL · Takt 3 — LANDUNG, dann schnurrt sie */
.qmp-katze[data-akt="jubel-3"] .qmp-leben { animation: qmp-katze-j3 var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j3 { 0% { transform: scale(1.22, .78); } 9% { transform: translateY(-4%) scale(.93, 1.1); } 18% { transform: scale(1.05, .96); } 27% { transform: scale(.99, 1.02); } 34% { transform: none; }
  38% { transform: rotate(-2.4deg) scale(1.02, .98); } 42% { transform: rotate(2.4deg) scale(1.02, .98); } 46% { transform: rotate(-2.4deg) scale(1.02, .98); } 50% { transform: rotate(2.4deg) scale(1.02, .98); } 54% { transform: rotate(-2deg) scale(1.02, .98); } 58% { transform: rotate(2deg) scale(1.02, .98); }
  62% { transform: rotate(-1.4deg); } 66% { transform: none; } 78% { transform: scale(.96, 1.06); } 90% { transform: scale(1.02, .99); } 100% { transform: none; } }
.qmp-katze[data-akt="jubel-3"] .qmp-katze-kopf { animation: qmp-katze-j3-kopf var(--qmp-d) ease-in-out 1 both; }
@keyframes qmp-katze-j3-kopf { 0% { transform: translateY(5%) rotate(4deg) scale(1.03, .96); } 10% { transform: translateY(-3.4%) rotate(4deg); } 22% { transform: translateY(.6%) rotate(4deg); } 34% { transform: translateY(-.9%) rotate(4deg); } 44% { transform: translateY(0) rotate(-8deg); } 54% { transform: translateY(0) rotate(9deg); } 64% { transform: translateY(0) rotate(-5deg); } 76%, 100% { transform: translateY(-.9%) rotate(4deg); } }
.qmp-katze[data-akt="jubel-3"] .qmp-katze-schweif { animation: qmp-katze-lande-s calc(var(--qmp-d) * .4) ease-in-out 1 both; }
.qmp-katze[data-akt="jubel-3"] .qmp-katze-ol { animation: qmp-katze-lande-ol calc(var(--qmp-d) * .34) ease-in-out 1 both, qmp-katze-zucken-l calc(var(--qmp-d) * .14) ease-in-out calc(var(--qmp-d) * .42) 2 forwards; }
.qmp-katze[data-akt="jubel-3"] .qmp-katze-or { animation: qmp-katze-lande-or calc(var(--qmp-d) * .34) ease-in-out 1 both, qmp-katze-zucken-r calc(var(--qmp-d) * .14) ease-in-out calc(var(--qmp-d) * .5) 2 forwards; }
@keyframes qmp-katze-zucken-l { 0%, 100% { transform: none; } 40% { transform: rotate(-16deg) scale(1, .9); } }
@keyframes qmp-katze-zucken-r { 0%, 100% { transform: none; } 40% { transform: rotate(16deg) scale(1, .9); } }

/* Ohne Bewegung: alles hält an, der Glanz bleibt (die Ruhewerte oben). */
.qmp-still, .qmp-still * { animation: none !important; }
@media (prefers-reduced-motion: reduce) { .qmp, .qmp * { animation: none !important; } }

/* =====================================================================
   DIE EBENE DARÜBER (Tobi, 2026-10-26 — Zielbilder: design/handy/pro-im-spiel/durchgang.html). Nur ergänzt.
   DER UMRISS (QN.monsterProUmriss): die Figur als Fläche in ihrem Licht, genau auf ihr. Ein Glanzband läuft darüber.
     .glimmt   Vorzeichen: Der Umriss glimmt auf — die Figur selbst ist noch nicht da
     .pulst    Spannung: zweimal, jedes Mal heller und ein wenig größer (am Fuß)
     .loest    Entladung: blitzt auf, wächst ein Stück und vergeht, während die Figur erscheint
     .kante    hinter der Figur, etwas größer: ihre Kante leuchtet einmal auf und klingt aus
   .qmp-erscheint (an der Figur): Sie springt aus ihrem Umriss — gestaucht, gestreckt, nachgeschwungen; die Pose bleibt danach.
   Nur transform und opacity; ohne Bewegung zeigt der Umriss nichts (er ist ein Ereignis, kein Merkmal).
   ===================================================================== */
.qmp-umriss { position: absolute; inset: 0; display: block; pointer-events: none; overflow: hidden; opacity: 0; background: var(--qmp-licht, #c4b5fd);
  -webkit-mask-size: 100% 100%; mask-size: 100% 100%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; transform-origin: 50% 88%; }
.qmp-umriss > i { position: absolute; top: -10%; bottom: -10%; left: -55%; width: 42%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .95), transparent); transform: translateX(0) skewX(-16deg); }
.qmp-umriss.glimmt { animation: qmp-umriss-glimmt .8s cubic-bezier(.3, .7, .3, 1) both; }
.qmp-umriss.glimmt > i { animation: qmp-umriss-band .9s .1s cubic-bezier(.45, 0, .2, 1) both; }
@keyframes qmp-umriss-glimmt { 0% { opacity: 0; transform: scale(.94); } 60% { opacity: .62; transform: scale(1.01); } 100% { opacity: .5; transform: none; } }
@keyframes qmp-umriss-band { from { transform: translateX(0) skewX(-16deg); } to { transform: translateX(400%) skewX(-16deg); } }
.qmp-umriss.pulst { animation: qmp-umriss-pulst .8s ease-in-out both; }
@keyframes qmp-umriss-pulst { 0% { opacity: .5; transform: none; } 22% { opacity: .9; transform: scale(1.035, 1.05); } 44% { opacity: .55; transform: scale(.99); } 72% { opacity: 1; transform: scale(1.05, 1.07); } 100% { opacity: .85; transform: scale(1.02); } }
.qmp-umriss.loest { animation: qmp-umriss-loest .5s cubic-bezier(.2, .6, .3, 1) both; }
@keyframes qmp-umriss-loest { 0% { opacity: 1; transform: scale(1.02); } 30% { opacity: .95; transform: scale(1.1, 1.12); } 100% { opacity: 0; transform: scale(1.22, 1.26); } }
.qmp-umriss.kante { transform: scale(1.1, 1.08); animation: qmp-umriss-kante 1.4s cubic-bezier(.25, .7, .3, 1) both; }
.qmp-umriss.kante > i { animation: qmp-umriss-band .8s .05s cubic-bezier(.45, 0, .2, 1) both; }
@keyframes qmp-umriss-kante { 0% { opacity: 0; transform: scale(1, 1); } 16% { opacity: .95; transform: scale(1.14, 1.12); } 40% { opacity: .7; transform: scale(1.1, 1.08); } 100% { opacity: 0; transform: scale(1.06, 1.05); } }
.qmp.qmp-erscheint .qmp-lage { animation: qmp-erscheint .72s linear both; }
@keyframes qmp-erscheint { 0% { opacity: 0; transform: translateY(6%) scale(.5, .22); animation-timing-function: cubic-bezier(.1, .7, .3, 1); }
  14% { opacity: 1; transform: translateY(-14%) scale(.78, 1.32); animation-timing-function: cubic-bezier(.3, 0, .7, 1); }
  42% { opacity: 1; transform: scale(1.16, .84); animation-timing-function: ease-out; } 62% { transform: translateY(-3%) scale(.95, 1.06); } 80% { transform: scale(1.03, .97); } 100% { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .qmp-umriss { display: none !important; } }
/* LANDEN (an der Figur, für jeden Platz, an dem sie ankommt): Sie fällt SENKRECHT auf ihren Platz — kein Weg von der Seite, also nie über andere Plätze.
   Fällt mit Gewicht (beschleunigt, gestreckt), staucht beim Aufprall, federt hoch, schwingt aus; Gesicht und Arme kommen einen Hauch später an.
   --qmp-fall: wie hoch sie herfällt (Vorgabe −120 % ihrer Höhe). Aufprall bei 55 % der Dauer (.qmp-landet: 0,9 s → 0,5 s). */
.qmp.qmp-landet .qmp-akt { animation: qmp-landet-bahn .9s linear both; }
@keyframes qmp-landet-bahn { 0% { opacity: 0; transform: translateY(var(--qmp-fall, -120%)); animation-timing-function: cubic-bezier(.55, 0, 1, .55); } 10% { opacity: 1; }
  55% { opacity: 1; transform: translateY(0); animation-timing-function: cubic-bezier(.15, .7, .35, 1); } 71% { transform: translateY(-8%); animation-timing-function: cubic-bezier(.55, 0, .85, .5); } 84%, 100% { opacity: 1; transform: none; } }
.qmp.qmp-landet .qmp-leben { animation: qmp-landet-koerper .9s linear both; }
@keyframes qmp-landet-koerper { 0% { transform: scale(.94, 1.08); } 50% { transform: scale(.86, 1.18); animation-timing-function: cubic-bezier(.2, .7, .4, 1); } 57% { transform: scale(1.32, .68); animation-timing-function: ease-out; }
  70% { transform: scale(.9, 1.13); animation-timing-function: ease-in-out; } 84% { transform: scale(1.07, .94); } 93% { transform: scale(.98, 1.02); } 100% { transform: none; } }
.qmp.qmp-landet .qmp-gesicht { animation: qmp-landet-gesicht .9s ease-in-out both; }
@keyframes qmp-landet-gesicht { 0%, 52% { transform: translateY(-2.5%); } 62% { transform: translateY(5%); } 76% { transform: translateY(-2%); } 90%, 100% { transform: none; } }
.qmp.qmp-landet .qmp-arme { animation: qmp-landet-arme .9s ease-in-out both; }
@keyframes qmp-landet-arme { 0%, 48% { transform: translateY(-7%) scale(1, 1.08); } 61% { transform: translateY(7%) scale(1.08, .88); } 75% { transform: translateY(-3.5%) scale(.98, 1.06); } 90%, 100% { transform: none; } }
