/* Animations de victoire. */
.victory-overlay {
  position: fixed;
  z-index: 2000;
  inset: 0;
  display: grid;
  place-items: center;
  overflow: hidden;
  padding: 20px;
  color: #fff7df;
  background:
    radial-gradient(circle at 50% 45%, rgba(216,173,87,.2), transparent 32%),
    rgba(3,18,13,.84);
  opacity: 0;
  backdrop-filter: blur(5px);
  transition: opacity .32s ease;
  isolation: isolate;
}
.victory-overlay.victory-visible { opacity: 1; }
.victory-overlay.victory-leaving { opacity: 0; }
.victory-final {
  background:
    radial-gradient(circle at 50% 43%, rgba(255,211,94,.28), transparent 35%),
    linear-gradient(145deg, rgba(24,15,49,.94), rgba(3,34,24,.94));
}
.victory-aurora {
  position: absolute;
  z-index: -2;
  width: min(92vw, 920px);
  aspect-ratio: 1;
  border-radius: 50%;
  background: conic-gradient(from 20deg, transparent, rgba(255,212,97,.35), transparent, rgba(78,221,156,.27), transparent);
  filter: blur(28px);
  animation: victory-aurora-spin 7s linear infinite;
}
.victory-ring {
  position: absolute;
  z-index: -1;
  width: min(72vw, 680px);
  aspect-ratio: 1;
  border: 2px solid rgba(255,220,133,.46);
  border-radius: 50%;
  box-shadow: 0 0 35px rgba(255,200,80,.28), inset 0 0 35px rgba(255,200,80,.18);
  animation: victory-ring-pulse 2.4s ease-out infinite;
}
.victory-ring.ring-two { animation-delay: .7s; }
.victory-panel {
  position: relative;
  width: min(680px, 92vw);
  padding: clamp(32px, 7vw, 62px) 26px 30px;
  text-align: center;
  background:
    linear-gradient(145deg, rgba(30,90,66,.88), rgba(8,39,30,.94)),
    #123f35;
  border: 2px solid #e3b95f;
  border-radius: 26px;
  box-shadow:
    0 0 0 8px rgba(227,185,95,.08),
    0 28px 90px rgba(0,0,0,.72),
    inset 0 0 45px rgba(255,213,116,.1);
  transform: scale(.55) rotateX(18deg);
  opacity: 0;
  animation: victory-panel-arrive .8s cubic-bezier(.2,1.45,.35,1) .15s forwards;
}
.victory-final .victory-panel {
  border-color: #ffe18a;
  background:
    linear-gradient(145deg, rgba(69,42,109,.92), rgba(12,60,43,.96)),
    #241638;
  box-shadow: 0 0 0 10px rgba(255,225,138,.09), 0 30px 110px rgba(0,0,0,.78), inset 0 0 60px rgba(255,219,112,.14);
}
.victory-brand {
  margin: 0 0 8px;
  color: #f1c865;
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .28em;
}
.victory-panel h2 {
  margin: 0;
  color: #fff0b9;
  font-family: Georgia, serif;
  font-size: clamp(2.8rem, 10vw, 6.5rem);
  line-height: .93;
  letter-spacing: .04em;
  text-shadow: 0 4px 0 #8d5d17, 0 0 26px rgba(255,220,115,.72);
}
.victory-final .victory-panel h2 { font-size: clamp(2.4rem, 8vw, 5rem); }
.victory-crown {
  position: absolute;
  top: -46px;
  left: 50%;
  color: #ffe28a;
  font-size: 5.4rem;
  line-height: 1;
  text-shadow: 0 5px 0 #9c681d, 0 0 24px rgba(255,222,125,.85);
  transform: translateX(-50%) rotate(-5deg);
  animation: victory-crown-float 1.8s ease-in-out infinite alternate;
}
.victory-subtitle {
  margin: 15px 0 5px;
  font-family: Georgia, serif;
  font-size: clamp(1.2rem, 4vw, 1.8rem);
}
.victory-score { min-height: 1.5em; margin: 6px 0 12px; color: #f3d98c; }
.victory-time {
  display: inline-grid;
  gap: 3px;
  margin: 0 0 22px;
  padding: 8px 18px 9px;
  color: #fff6d9;
  background: rgba(0,0,0,.22);
  border: 1px solid rgba(255,225,138,.24);
  border-radius: 999px;
  box-shadow: inset 0 0 18px rgba(255,225,138,.06);
}
.victory-time span {
  opacity: .72;
  font-size: .62rem;
  font-weight: 900;
  letter-spacing: .18em;
  text-transform: uppercase;
}
.victory-time strong {
  color: #ffe28a;
  font-family: "Courier New", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 1.18rem;
  letter-spacing: .08em;
}
.victory-continue {
  min-width: 190px;
  padding: 13px 24px;
  color: #17231e;
  background: linear-gradient(#ffe495, #d5a846);
  border: 1px solid #fff1bf;
  box-shadow: 0 5px 20px rgba(0,0,0,.35), 0 0 25px rgba(255,214,105,.18);
}
.victory-particles,
.victory-cards { position: absolute; inset: 0; pointer-events: none; }
.victory-particle {
  position: absolute;
  z-index: 3;
  left: 50%;
  top: 50%;
  color: #f7e7ba;
  font-style: normal;
  font-size: var(--size);
  opacity: 0;
  text-shadow: 0 0 8px currentColor;
  animation: victory-particle-burst 2.7s cubic-bezier(.1,.55,.25,1) var(--delay) infinite;
}
.victory-particle.suit-1,
.victory-particle.suit-2 { color: #ff6f72; }
.victory-final .victory-particle { animation-duration: 3.4s; }
.victory-flying-card {
  position: absolute;
  z-index: 2;
  left: 50%;
  bottom: -90px;
  display: grid;
  place-content: center;
  width: 52px;
  height: 74px;
  color: #17231e;
  background: #fff7df;
  border: 2px solid #d7bd7b;
  border-radius: 7px;
  box-shadow: 0 7px 18px rgba(0,0,0,.4);
  font-family: Georgia, serif;
  font-style: normal;
  text-align: center;
  opacity: 0;
  animation: victory-card-flight 2.8s cubic-bezier(.18,.7,.25,1) var(--card-delay) infinite;
}
.victory-flying-card b { font-size: 1.15rem; }
.victory-flying-card span { font-size: 1.45rem; line-height: 1; }
.victory-flying-card.suit-1,
.victory-flying-card.suit-2 { color: #c63e3e; }
.victory-card-orbit {
  position: absolute;
  z-index: 4;
  top: 0;
  left: 0;
  width: 0;
  height: 0;
  offset-path: ellipse(clamp(310px, 40vw, 610px) clamp(220px, 37vh, 410px) at 50% 50%);
  offset-distance: var(--orbit-start);
  offset-rotate: 0deg;
  animation: victory-card-orbit 6.5s linear var(--orbit-delay) infinite;
}
.victory-card-orbit .victory-orbiting-card {
  left: 0;
  bottom: auto;
  opacity: 0;
  animation: victory-card-join-orbit 1.15s cubic-bezier(.16,.72,.24,1.12) var(--orbit-delay) forwards;
}
@keyframes victory-panel-arrive {
  to { opacity: 1; transform: scale(1) rotateX(0); }
}
@keyframes victory-particle-burst {
  0% { opacity: 0; transform: translate(-50%,-50%) scale(.2); }
  12% { opacity: 1; }
  78% { opacity: .9; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--tx)), calc(-50% + var(--ty))) rotate(var(--spin)) scale(1.25); }
}
@keyframes victory-card-flight {
  0% { opacity: 0; transform: translate(-50%,0) rotate(0) scale(.65); }
  12% { opacity: 1; }
  72% { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--card-x)), var(--card-y)) rotate(var(--card-rotate)) scale(1.05); }
}
@keyframes victory-card-join-orbit {
  0% { opacity: 0; transform: translate(-50%, 65vh) rotate(-120deg) scale(.55); }
  35% { opacity: 1; }
  100% { opacity: 1; transform: translate(-50%, -50%) rotate(var(--orbit-spin)) scale(1); }
}
@keyframes victory-card-orbit {
  to { offset-distance: calc(var(--orbit-start) + 100%); }
}
@keyframes victory-ring-pulse {
  0% { opacity: .7; transform: scale(.3); }
  100% { opacity: 0; transform: scale(1.35); }
}
@keyframes victory-aurora-spin { to { transform: rotate(360deg); } }
@keyframes victory-crown-float { to { transform: translateX(-50%) translateY(-8px) rotate(5deg); } }
@media (max-width: 600px) {
  .victory-flying-card { width: 42px; height: 60px; }
  .victory-card-orbit {
    offset-path: ellipse(45vw 39vh at 50% 50%);
  }
  .victory-panel { padding-inline: 18px; }
}
