/* Cleaning Effects – Maskottchen Mini */
#cmm-container{
  position: fixed;
  left: -20vw;
  z-index: 99998;
  pointer-events: none;
  transform: translateX(-20vw) translateY(0);
  will-change: transform, opacity;
  opacity: 0;
}
#cmm-container.cmm-top { top: 10px; }
#cmm-container.cmm-bottom { bottom: 10px; }

#cmm-container.is-run{
  opacity: 1;
  animation: cmmRunSmooth var(--cmm-dur, 12s) cubic-bezier(.22,.61,.36,1) 1;
}
@keyframes cmmRunSmooth{
  0%   { transform: translateX(-20vw) translateY(0); }
  20%  { transform: translateX(5vw)   translateY(-0.5px); }
  40%  { transform: translateX(35vw)  translateY(0); }
  60%  { transform: translateX(65vw)  translateY(-0.5px); }
  80%  { transform: translateX(95vw)  translateY(0); }
  100% { transform: translateX(120vw) translateY(0); }
}
  10%  { transform: translateX(-5vw)  translateY(-1px); }
  25%  { transform: translateX(20vw)  translateY(0); }
  50%  { transform: translateX(50vw)  translateY(-1px); }
  75%  { transform: translateX(85vw)  translateY(0); }
  100% { transform: translateX(120vw) translateY(-1px); }
}

.cmm-sparkle{
  position: fixed;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--cmm-accent, #ffd166);
  pointer-events: none;
  z-index: 99997;
  opacity: 0.85;
  animation: cmmSparkle .9s ease-out forwards;
  filter: drop-shadow(0 0 4px rgba(255,255,255,.7));
}
@keyframes cmmSparkle{
  0%{ transform: translateY(0) scale(.6); opacity: .9; }
  80%{ transform: translateY(-18px) scale(1.05); opacity: .4; }
  100%{ transform: translateY(-22px) scale(1.05); opacity: 0; }
}

@media (prefers-reduced-motion: reduce){
  #cmm-container.is-run{ animation: none !important; opacity: 0 !important; }
  .cmm-sparkle{ display: none !important; }
}


/* Wipe swing animations */
#cmm-container .cmm-wiper{
  transform-box: fill-box;
  transform-origin: 50% 10%;
  animation: cmmWipeSwing 1.6s cubic-bezier(.25,.46,.45,.94) infinite alternate;
}
#cmm-container .cmm-arm{
  transform-box: fill-box;
  transform-origin: 50% 0%;
  animation: cmmArmSwing 1.6s cubic-bezier(.25,.46,.45,.94) infinite alternate;
}
@keyframes cmmWipeSwing{
  from { transform: rotate(-6deg); }
  to   { transform: rotate(6deg); }
}
  to   { transform: rotate(12deg); }
}
@keyframes cmmArmSwing{
  from { transform: rotate(-3deg); }
  to   { transform: rotate(3deg); }
}
  to   { transform: rotate(4deg); }
}
@media (prefers-reduced-motion: reduce){
  #cmm-container .cmm-wiper, #cmm-container .cmm-arm{
  transform-box: fill-box;
  transform-origin: 50% 0%;
  animation: cmmArmSwing 1.6s cubic-bezier(.25,.46,.45,.94) infinite alternate;
}
}
