/* Luca vivo — personaggio articolato a strati (corpo, braccio, coda,
   palpebre). Niente fotogrammi e niente dondolio dell'immagine intera:
   si muovono le parti del corpo, con cicli morbidi e continui. */
.luca-stage {
  position: relative;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border-radius: 50%;
  flex: none;
  background: #fff;
  --lid-sx: #a9866c;
  --lid-dx: #c59e7a;
}
.login-card .luca-stage { margin: 0 auto; }
.luca-breath {
  position: absolute;
  inset: 0;
  transform-origin: 50% 97%;
  animation: luca-breath 3.9s ease-in-out infinite alternate;
}
.luca-layer {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  user-select: none;
  -webkit-user-drag: none;
}
.luca-arm {
  transform-origin: 68.8% 52.2%;
  animation: luca-wave 5.6s ease-in-out infinite;
}
.luca-tail {
  transform-origin: 30.2% 80.0%;
  animation: luca-tail 4.4s ease-in-out infinite alternate;
}
/* Palpebre: ellissi morbide color pelliccia sopra gli occhi; da chiuse
   (scaleY ~0, invisibili) si abbassano per un istante (classe .blink). */
.luca-lid {
  position: absolute;
  width: 8.4%;
  height: 6.4%;
  border-radius: 50%;
  opacity: 0;
  transform: scaleY(0.15);
  transition: opacity 60ms ease, transform 70ms ease;
  pointer-events: none;
}
.luca-lid--sx {
  left: 34.2%;
  top: 30.1%;
  background: radial-gradient(ellipse at center, var(--lid-sx) 52%, transparent 76%);
}
.luca-lid--dx {
  left: 53.2%;
  top: 27.7%;
  background: radial-gradient(ellipse at center, var(--lid-dx) 52%, transparent 76%);
}
.luca-stage.blink .luca-lid {
  opacity: 1;
  transform: scaleY(1);
}

@keyframes luca-wave {
  0%   { transform: rotate(-3deg); }
  11%  { transform: rotate(9deg); }
  22%  { transform: rotate(-3deg); }
  33%  { transform: rotate(9deg); }
  44%  { transform: rotate(-2deg); }
  58%  { transform: rotate(-2deg); }
  100% { transform: rotate(-3deg); }
}
@keyframes luca-breath {
  from { transform: scaleY(1) translateY(0); }
  to   { transform: scaleY(1.009) translateY(-0.18%); }
}
@keyframes luca-tail {
  from { transform: rotate(-3.2deg); }
  to   { transform: rotate(3.4deg); }
}

@media (prefers-reduced-motion: reduce) {
  .luca-breath, .luca-arm, .luca-tail { animation: none; }
}

/* SOSPESA da Gian (11/10 sera): la versione articolata fatta in casa non
   lo convince — in attesa della versione costruita da Claude, Luca resta
   fermo nella posa originale (meglio fermo che un'animazione mediocre). */
.luca-breath, .luca-arm, .luca-tail { animation: none !important; }
.luca-stage.blink .luca-lid { opacity: 0 !important; }
