/* Cursor de Boing + onomatopeyas de cómic */
.has-cursor, .has-cursor a, .has-cursor button, .has-cursor [data-hover] { cursor: none; }
.has-cursor input, .has-cursor textarea, .has-cursor select { cursor: auto; }
/* la hoja de reserva y el visor son <dialog> modales: se pintan por encima de todo, también de
   Boing, así que dentro vuelve el cursor normal */
.has-cursor dialog[open] { cursor: auto; }
.has-cursor dialog[open] :is(a, button, [data-hover], label) { cursor: pointer; }
.has-cursor:has(dialog[open]) .cursor { opacity: 0; }
.cursor {
  position: fixed; left: 0; top: 0; z-index: 9999; pointer-events: none;
  width: 0; height: 0; opacity: 0; transition: opacity .25s;
}
.cursor.on { opacity: 1; }
.cursor img {
  /* max-width: none: la regla general img { max-width: 100% } la dejaba en 0 px (.cursor mide 0) */
  position: absolute; width: 46px; height: 46px; max-width: none; left: -23px; top: -23px;
  filter: drop-shadow(0 6px 8px rgba(20, 0, 8, .35));
  transition: transform .35s cubic-bezier(.34, 1.8, .5, 1);
}
.cursor.hover img { transform: scale(1.55) rotate(-8deg); animation: wiggle .6s ease-in-out infinite alternate; }
.cursor.press img { transform: scale(.82, .72); transition-duration: .08s; }
@keyframes wiggle { from { rotate: -6deg; } to { rotate: 8deg; } }

.fx-burst { position: fixed; z-index: 9998; pointer-events: none; width: 0; height: 0; }
.fx-burst svg {
  position: absolute; width: 96px; height: 96px; left: -48px; top: -48px; overflow: visible;
  transform: rotate(var(--r)) scale(0); animation: pop .9s cubic-bezier(.2, 1.6, .4, 1) forwards;
}
.fx-big svg { width: 140px; height: 140px; left: -70px; top: -70px; }
.fx-burst path { fill: #ffc52b; stroke: #2b0510; stroke-width: 4; stroke-linejoin: round; }
.fx-burst text {
  font-family: Bangers, 'Comic Sans MS', sans-serif; font-size: 25px; letter-spacing: .5px;
  text-anchor: middle; fill: #e3182d; stroke: #2b0510; stroke-width: 1.4px; paint-order: stroke;
}
.fx-burst i {
  position: absolute; left: -4px; top: -4px; width: 8px; height: 11px; border-radius: 2px;
  animation: confetti .95s cubic-bezier(.15, .7, .4, 1) forwards;
}
@keyframes pop {
  0% { transform: rotate(var(--r)) scale(0); opacity: 1; }
  35% { transform: rotate(var(--r)) scale(1.08); }
  70% { opacity: 1; }
  100% { transform: rotate(var(--r)) scale(.9) translateY(-18px); opacity: 0; }
}
@keyframes confetti {
  0% { transform: translate(0, 0) rotate(0); opacity: 1; }
  100% { transform: translate(var(--dx), calc(var(--dy) + 60px)) rotate(var(--rz)); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .cursor img, .cursor.hover img { animation: none; transition: none; }
}
