/* ================================================================================================================================ */
/* Die Stube lebt (Spec 3.B1–B8, themeAnim/christmas/ambience.js): Wichtel, Katze, Fenster, Kranz, Berg, Teller. Nur transform/opacity. */
/* Drehpunkte: `translate(px py)` außen, Klasse innen, Ursprung 0 0 (wie die übrigen Teile der Szene).                               */
/* ================================================================================================================================ */
.xma-scene :is(.xma-wim__leg, .xma-wim__arm, .xma-wim__head, .xma-wim__bell, .xma-wim__line, .xma-wim__swing, .xma-wim__body, .xma-wim__zzz,
  .xma-wanda__leg, .xma-wanda__arm, .xma-wanda__head, .xma-wanda__flap, .xma-wanda__ribbon, .xma-wanda__bell, .xma-wanda__gift,
  .xma-cat__paw, .xma-cat__head, .xma-cat__leg, .xma-wflame, .xma-wflame__glow, .xma-sparkler__sparks, .xma-pgift, .xma-snowman__scarf-end,
  .xma-smoke, .xma-sled, .xma-bauble-swing, .xma-placed, .xma-pile-slot, .xma-cat-fig,
  .xma-santa__beard, .xma-santa__arm, .xma-santa__leg, .xma-santa__pom, .xma-wim__handbell, .xma-wim__ball, .xma-wanda__gift, .xma-sball, .xma-sball__y,
  .xma-sball__splat, .xma-gwanda, .xma-wflame__ring, .xma-santa-slot) {
  transform-box: view-box;
  transform-origin: 0 0;
}
.xma-eyes { transform-box: fill-box; transform-origin: center; animation: xma-eyeblink 5.5s ease-in-out infinite; }
.xma-wanda .xma-eyes { animation-delay: -2.4s; }
@keyframes xma-eyeblink {
  0%, 92%, 100% { transform: scaleY(1); }
  95% { transform: scaleY(0.1); }
}
/* Wim: Beine baumeln, Mützenglöckchen schwingt, Angel wippt, Atem; Posenwechsel unbemerkt (kurz ausblenden). */
.xma-wim__leg--l { animation: xma-dangle 2.6s ease-in-out infinite alternate; }
.xma-wim__leg--r { animation: xma-dangle 2.6s ease-in-out -1.3s infinite alternate; }
@keyframes xma-dangle {
  from { transform: rotate(-7deg); }
  to { transform: rotate(8deg); }
}
.xma-wim__bell, .xma-wanda__bell { animation: xma-bellsway 3.2s ease-in-out infinite alternate; }
@keyframes xma-bellsway {
  from { transform: rotate(-9deg); }
  to { transform: rotate(10deg); }
}
.xma-wim__head { animation: xma-nod 5s ease-in-out infinite alternate; }
@keyframes xma-nod {
  from { transform: rotate(-1.5deg); }
  to { transform: rotate(2deg); }
}
.xma-wim__line { animation: xma-bob-line 2.8s ease-in-out infinite alternate; }
@keyframes xma-bob-line {
  from { transform: rotate(-3deg); }
  to { transform: rotate(4deg); }
}
.xma-wim__swing { animation: xma-swing-wim 3.4s ease-in-out infinite alternate; }
@keyframes xma-swing-wim {
  from { transform: rotate(-4deg); }
  to { transform: rotate(4deg); }
}
.xma-wim__body { animation: xma-breath-wim 3.6s ease-in-out infinite alternate; }
@keyframes xma-breath-wim {
  from { transform: scale(1, 1); }
  to { transform: scale(1.01, 1.025); }
}
.xma-wim-slot.is-on { animation: xma-swap 1000ms ease-in-out both; }
@keyframes xma-swap {
  0% { opacity: 1; }
  38%, 52% { opacity: 0; }
  100% { opacity: 1; }
}
/* Wanda: packt ein (Arme, Papier, Schleife); geht mit dem Paket zum Berg und zurück. */
.xma-wanda__arm--l { animation: xma-wrap-arm 1.6s ease-in-out infinite alternate; }
.xma-wanda__arm--r { animation: xma-wrap-arm 1.6s ease-in-out -0.8s infinite alternate; }
@keyframes xma-wrap-arm {
  from { transform: rotate(-9deg); }
  to { transform: rotate(8deg); }
}
.xma-wanda__flap { transform: rotate(var(--a, 0deg)); animation: xma-flap 3.4s ease-in-out infinite alternate; }
@keyframes xma-flap {
  from { transform: rotate(-38deg); }
  to { transform: rotate(-4deg); }
}
.xma-wanda__ribbon { animation: xma-ribbon 1.7s ease-in-out infinite alternate; }
@keyframes xma-ribbon {
  from { transform: scaleY(1); }
  to { transform: scaleY(0.94); }
}
.xma-wanda-walk.is-fwd { animation: xma-wwalk 2200ms ease-in-out both; }
.xma-wanda-walk.is-at { transform: translateX(var(--dx)); }
.xma-wanda-walk.is-back { animation: xma-wwalk 2200ms ease-in-out reverse both; }
@keyframes xma-wwalk {
  from { transform: translateX(0); }
  to { transform: translateX(var(--dx)); }
}
.xma-wanda-walk.is-walk .xma-wanda__leg--l { animation: xma-step 0.44s ease-in-out infinite alternate; }
.xma-wanda-walk.is-walk .xma-wanda__leg--r { animation: xma-step 0.44s ease-in-out -0.22s infinite alternate; }
@keyframes xma-step {
  from { transform: rotate(-16deg); }
  to { transform: rotate(16deg); }
}
.xma-wanda__gift { animation: xma-carry 0.44s ease-in-out infinite alternate; }
@keyframes xma-carry {
  from { transform: translateY(0); }
  to { transform: translateY(-3px); }
}
.xma-wanda.is-empty .xma-wanda__gift, .is-empty .xma-wanda__gift { display: none; }
.xma-placed.is-on { animation: xma-placed 1400ms ease-out both; }
@keyframes xma-placed {
  0% { opacity: 0; transform: translateY(-34px) scale(0.5); }
  22% { opacity: 1; transform: translateY(0) scale(1); }
  70% { opacity: 1; transform: translateY(0) scale(1); }
  100% { opacity: 0; transform: translateY(0) scale(1); }
}
/* Geschenkeberg: neue Pakete poppen auf, der Berg federt beim Ablegen. */
.xma-pile-slot.is-grow .xma-pgift--new { animation: xma-pgift 900ms cubic-bezier(0.3, 1.5, 0.5, 1) calc(var(--i, 0) * 40ms) both; }
@keyframes xma-pgift {
  0% { opacity: 0; transform: scale(0.2); }
  100% { opacity: 1; transform: scale(1); }
}
.xma-pile-slot.is-bump { animation: xma-bump 700ms ease-out; }
@keyframes xma-bump {
  0%, 100% { transform: scale(1, 1); }
  30% { transform: scale(1.01, 0.985); }
  60% { transform: scale(0.998, 1.008); }
}
/* Adventskranz: Flammen flackern (versetzt), Wunderkerze nur zum Rundenstart. */
.xma-wflame { animation: xma-candle calc(0.9s + var(--i, 0) * 0.13s) ease-in-out infinite alternate; }
.xma-wflame__glow { animation: xma-glow 1.9s ease-in-out infinite alternate; }
.xma-sparkler { display: none; }
.xma-sparkler.is-on { display: inline; }
.xma-sparkler.is-on .xma-sparkler__sparks { animation: xma-sparks 3000ms ease-out both; }
@keyframes xma-sparks {
  0% { opacity: 0; transform: scale(0.4) rotate(0deg); }
  10% { opacity: 1; transform: scale(1.1) rotate(25deg); }
  50% { opacity: 0.9; transform: scale(0.9) rotate(80deg); }
  100% { opacity: 0; transform: scale(0.5) rotate(140deg); }
}
/* Schneemann: der Schal weht leicht. Rauch steigt, das Kind rodelt den Hügel hinunter. */
.xma-snowman__scarf-end { animation: xma-scarf 3s ease-in-out infinite alternate; }
@keyframes xma-scarf {
  from { transform: rotate(-6deg); }
  to { transform: rotate(10deg); }
}
.xma-smoke {
  fill: #f1eef5;
  opacity: 0;
  animation: xma-smoke 8s calc(var(--i) * -2.6s) infinite ease-out;
}
@keyframes xma-smoke {
  0% { opacity: 0; transform: translate(0, 0) scale(0.6); }
  14% { opacity: 0.75; }
  100% { opacity: 0; transform: translate(16px, -66px) scale(2.3); }
}
.xma-sled.is-on { animation: xma-sledrun 5600ms cubic-bezier(0.4, 0.1, 0.8, 0.9) both; }
@keyframes xma-sledrun {
  0% { opacity: 0; transform: translate(0, 0) rotate(0deg); }
  8% { opacity: 1; }
  88% { opacity: 1; }
  100% { opacity: 0; transform: translate(var(--dx), var(--dy)) rotate(-3deg); }
}
/* Katze: streckt sich, stupst die hängende Kugel an, die Kugel pendelt aus. */
.xma-cat-fig--stretch { animation: xma-stretch 3800ms ease-in-out both; }
@keyframes xma-stretch {
  0%, 100% { transform: scale(1, 1); }
  30%, 70% { transform: scale(1.05, 0.97); }
}
.xma-cat-fig--swat .xma-cat__paw { animation: xma-pawswat 900ms ease-in-out 600ms 3 both; }
@keyframes xma-pawswat {
  0%, 100% { transform: rotate(0deg); }
  45% { transform: rotate(-26deg); }
}
.xma-bauble-swing.is-on { animation: xma-ballswing 5200ms ease-out both; }
@keyframes xma-ballswing {
  0% { transform: rotate(0deg); }
  8% { transform: rotate(-17deg); }
  22% { transform: rotate(13deg); }
  36% { transform: rotate(-9deg); }
  50% { transform: rotate(6deg); }
  64% { transform: rotate(-3.5deg); }
  80% { transform: rotate(1.8deg); }
  100% { transform: rotate(0deg); }
}

/* ================================================================================================================================ */
/* Momente C1–C5 (Weihnachten 2): Glöckchen, Wanda im Geschenk, Schneeballschlacht, Weihnachtsmann schläft, Bescherung.                */
/* ================================================================================================================================ */
/* C1: Wim läutet sein Handglöckchen; die neue Kerze flammt auf. */
.xma-wim.is-bell .xma-wim__handbell { animation: xma-ring 0.34s ease-in-out infinite alternate; }
@keyframes xma-ring {
  from { transform: rotate(-24deg); }
  to { transform: rotate(24deg); }
}
.xma-wflame__ring { opacity: 0; }
.xma-wflame__ring.is-on { animation: xma-ring-flare 2400ms ease-out both; }
@keyframes xma-ring-flare {
  0% { opacity: 0; transform: scale(0.3); }
  15% { opacity: 0.95; transform: scale(0.9); }
  100% { opacity: 0; transform: scale(2.4); }
}
/* C2: Wanda springt aus dem Geschenk (zwischen Karton hinten und Deckel). */
.xma-gift.is-on .xma-gwanda { animation: xma-gwanda 5200ms ease-out both; }
@keyframes xma-gwanda {
  0%, 14% { transform: translateY(120px); }
  19% { transform: translateY(-34px); }
  24% { transform: translateY(0); }
  38% { transform: translateY(-12px); }
  52% { transform: translateY(0); }
  66% { transform: translateY(-8px); }
  78%, 100% { transform: translateY(120px); }
}
/* C3: der Schneeball fliegt vom Sims auf die Katze (x gleichmäßig, y als Wurfbogen), zerplatzt. */
.xma-sball.is-on { animation: xma-ballx 1000ms linear both; }
.xma-sball.is-on .xma-sball__y { animation: xma-bally 1000ms linear both; }
.xma-sball.is-on .xma-sball__splat { animation: xma-bsplat 1100ms ease-out both; }
.xma-sball__splat { opacity: 0; }
@keyframes xma-ballx {
  from { transform: translateX(0); }
  to { transform: translateX(var(--dx)); }
}
@keyframes xma-bally {
  0% { transform: translateY(0); animation-timing-function: ease-out; }
  30% { transform: translateY(-60px); animation-timing-function: cubic-bezier(0.5, 0, 0.9, 0.6); }
  90%, 100% { transform: translateY(var(--dy)); }
  100% { opacity: 0; }
}
@keyframes xma-bsplat {
  0%, 88% { opacity: 0; transform: translateX(var(--dx)) scale(0.3); }
  92% { opacity: 1; transform: translateX(var(--dx)) scale(1); }
  100% { opacity: 0; transform: translateX(var(--dx)) scale(1.2); }
}
/* C5: Weihnachtsmann schläft im Sessel (Bart hebt sich beim Schnarchen), Wanda schleicht hin und her. */
.xma-santa-slot .xma-santa { opacity: 0; transition: opacity 1000ms ease-in-out; }
.xma-santa-slot.is-on .xma-santa { opacity: 1; }
.xma-santa--armchair-sleep .xma-santa__beard { animation: xma-snore 3.6s ease-in-out infinite alternate; }
@keyframes xma-snore {
  from { transform: translateY(0) scale(1, 1); }
  to { transform: translateY(-3px) scale(1.03, 1.06); }
}
.xma-wanda-walk.is-sneak-l { animation: xma-sneak 7000ms ease-in-out both; }
.xma-wanda-walk.is-sneak-r { animation: xma-sneak 7000ms ease-in-out reverse both; }
@keyframes xma-sneak {
  from { transform: translateX(0); }
  to { transform: translateX(-420px); }
}
.xma-wanda-walk.is-sneak-l .xma-wanda__leg--l, .xma-wanda-walk.is-sneak-r .xma-wanda__leg--l { animation: xma-step 1.1s ease-in-out infinite alternate; }
.xma-wanda-walk.is-sneak-l .xma-wanda__leg--r, .xma-wanda-walk.is-sneak-r .xma-wanda__leg--r { animation: xma-step 1.1s ease-in-out -0.55s infinite alternate; }

/* ---- C4 Bescherung: Zug aus Schlitten und neun Rentieren im oberen Bildstreifen (vh/vw), Pakete an Fallschirmen ---- */
:is(.xma-fin__fly) :is(.xma-deer__leg, .xma-deer__head, .xma-deer__tail, .xma-deer__bell, .xma-nose__glow, .xma-santa__arm, .xma-santa__beard,
  .xma-santa__pom, .xma-bsleigh__body, .xma-parcel__chute, .xma-fin__guest) {
  transform-box: view-box;
  transform-origin: 0 0;
}
.xma-fin__fly {
  position: absolute;
  left: 0;
  top: var(--train-top);
  height: var(--train-h);
  aspect-ratio: var(--train-ar);
}
.xma-show.is-on .xma-fin__fly { animation: xma-fin-fly 12000ms linear both; }
@keyframes xma-fin-fly {
  0% { transform: translateX(-100%); }
  50% { transform: translateX(100vw); }
  100% { transform: translateX(-100%); }
}
.xma-fin__dir, .xma-fin__bob { width: 100%; height: 100%; position: relative; }
.xma-show.is-on .xma-fin__dir { animation: xma-fin-dir 12000ms steps(1, end) both; }
@keyframes xma-fin-dir {
  0% { transform: scaleX(1); }
  50% { transform: scaleX(-1); }
}
.xma-show.is-on .xma-fin__bob { animation: xma-fin-bob 2600ms ease-in-out infinite alternate; }
@keyframes xma-fin-bob {
  from { transform: translateY(-0.6vh) rotate(-0.5deg); }
  to { transform: translateY(0.6vh) rotate(0.5deg); }
}
.xma-fin__svg { display: block; width: 100%; height: 100%; overflow: visible; }
.xma-fin__guest { display: flex; align-items: flex-end; justify-content: center; transform-origin: 50% 100%; animation: xma-wave-guest 1.3s ease-in-out infinite alternate; }
@keyframes xma-wave-guest {
  from { transform: rotate(-4deg); }
  to { transform: rotate(4deg); }
}
.xma-fin__guest .pq-figure { flex: none; }
.xma-fin .xma-santa__arm--l, .xma-fin__fly .xma-santa__arm--l { animation: xma-santa-wave 0.8s ease-in-out infinite alternate; }
@keyframes xma-santa-wave {
  from { transform: rotate(0deg); }
  to { transform: rotate(-38deg); }
}
.xma-fin__fly .xma-deer__leg--fl, .xma-fin__fly .xma-deer__leg--hr { animation: xma-gallop 0.5s ease-in-out calc(var(--i, 0) * -0.11s) infinite alternate; }
.xma-fin__fly .xma-deer__leg--fr, .xma-fin__fly .xma-deer__leg--hl { animation: xma-gallop 0.5s ease-in-out calc(var(--i, 0) * -0.11s - 0.25s) infinite alternate; }
@keyframes xma-gallop {
  from { transform: rotate(-22deg); }
  to { transform: rotate(22deg); }
}
.xma-fin__fly .xma-deer__head { animation: xma-nod 1s ease-in-out calc(var(--i, 0) * -0.17s) infinite alternate; }
.xma-fin__fly .xma-nose__glow { animation: xma-glow 0.9s ease-in-out infinite alternate; }
/* Sprechblase: steht mit dem Weihnachtsmann, in der Spiegelung gegengedreht; erscheint bei jedem Überflug. */
.xma-fin__bubble {
  position: absolute;
  display: grid;
  place-items: center;
  width: 15vh;
  height: 5.6vh;
  border: 0.3vh solid #2b2430;
  border-radius: 2.7vh;
  background: #fffdf6;
  color: #b8322e;
  font: 800 2.6vh/1 Inter, system-ui, sans-serif;
  white-space: nowrap;
  opacity: 0;
}
.xma-fin__bubble::after {
  content: "";
  position: absolute;
  left: 1.2vh;
  bottom: -1.3vh;
  width: 2vh;
  height: 2vh;
  border: 0.3vh solid #2b2430;
  border-width: 0 0.3vh 0.3vh 0;
  background: #fffdf6;
  transform: skewX(-30deg) rotate(20deg);
}
.xma-show.is-on .xma-fin__bubble { animation: xma-bub-flip 12000ms steps(1, end) both, xma-bub-show 12000ms ease-in-out both; }
@keyframes xma-bub-flip {
  0% { transform: scaleX(1); }
  50% { transform: scaleX(-1); }
}
@keyframes xma-bub-show {
  0%, 4% { opacity: 0; }
  8%, 24% { opacity: 1; }
  30%, 54% { opacity: 0; }
  58%, 74% { opacity: 1; }
  80%, 100% { opacity: 0; }
}
/* Pakete: fallen vom Schlitten, der Fallschirm öffnet sich, sie sinken schwankend auf den Berg (--dx/--dy: Ziel in px) und gehen darin auf. */
.xma-fall {
  position: absolute;
  width: 6vh;
  height: 7.7vh;
  margin: -7.7vh 0 0 -3vh;
  opacity: 0;
}
.xma-fall svg { display: block; width: 100%; height: 100%; overflow: visible; }
.xma-show.is-on .xma-fall { animation: xma-parcel-fall 3000ms cubic-bezier(0.3, 0.6, 0.5, 1) var(--delay) both; }
.xma-show.is-on .xma-fall .xma-parcel { animation: xma-parcel-sway 1.2s ease-in-out calc(var(--i, 0) * -0.3s) infinite alternate; transform-origin: 50% 20%; }
@keyframes xma-parcel-fall {
  0% { opacity: 0; transform: translate(0, 0) scale(0.3); }
  8% { opacity: 1; transform: translate(0, 0) scale(1); }
  88% { opacity: 1; transform: translate(var(--dx), var(--dy)) scale(1); }
  100% { opacity: 0; transform: translate(var(--dx), var(--dy)) scale(0.85); }
}
@keyframes xma-parcel-sway {
  from { transform: rotate(-6deg); }
  to { transform: rotate(6deg); }
}
