/* Keep outcome-changing announcements legible across every table palette. */
body.v2 {
  --fx-announcement-bg: #321a15;
  --fx-announcement-text: #fff3d6;
  --fx-announcement-border: rgba(255, 243, 214, .55);
}
.v2 .fx-cutin .panel { height: clamp(180px, 36vh, 360px); }
.v2 .fx-cutin .panel-content { width: min(88vw, 720px); gap: clamp(10px, 2vw, 24px); }
.v2 .fx-cutin .emoji { flex: 0 0 auto; font-size: clamp(40px, 12vw, 100px); }
.v2 .fx-cutin .text-stack { flex: 1; min-width: 0; text-align: center; }
.v2 .fx-cutin .text { font-size: clamp(24px, 6.5vw, 48px); letter-spacing: .06em; white-space: normal; overflow-wrap: anywhere; }
.v2 .fx-cutin .badge-strip {
  padding: 5px 12px;
  border: 1px solid var(--fx-announcement-border);
  border-radius: 6px;
  background: var(--fx-announcement-bg);
  color: var(--fx-announcement-text);
  text-shadow: none;
  font-size: clamp(18px, 5vw, 30px);
  letter-spacing: .05em;
  overflow-wrap: anywhere;
}
.v2 .fx-cutin .sub { font-size: clamp(14px, 3.7vw, 20px); overflow-wrap: anywhere; }

/* These announcements end via JS timers, not animationend. The old blanket
   .01ms rule jumped straight to transparent final frames. Hold the information
   still until its existing .on cleanup, without changing any game timers. */
@media (prefers-reduced-motion: reduce) {
  .v2.god-shake, .v2.shake-screen { animation: none !important; }
  .v2 .fx-reach-banner.on,
  .v2 .fx-storm.on .storm-banner,
  .v2 .chance-banner.show:not(.hide) {
    padding: 10px 14px;
    border: 1px solid var(--fx-announcement-border);
    border-radius: 8px;
    background: var(--fx-announcement-bg);
    color: var(--fx-announcement-text);
    text-shadow: none;
  }
  .v2 .fx-cutin.on .panel {
    animation: none !important;
    transform: translate(-50%, -50%);
    opacity: 1;
  }
  .v2 .fx-cutin .panel-content { transform: none; }
  .v2 .fx-cutin .spark, .v2 .fx-flash, .v2 .god-flash { display: none; }
  .v2 .fx-reach-banner.on {
    animation: none !important;
    transform: translate(-50%, -50%);
    opacity: 1;
    font-size: clamp(36px, 10vw, 72px);
  }
  .v2 .fx-countdown.on .num { animation: none !important; transform: none; opacity: 1; }
  .v2 .fx-storm.on .storm-banner {
    animation: none !important;
    transform: translate(-50%, 0);
    opacity: 1;
    width: min(90vw, 720px);
    text-align: center;
    white-space: normal;
  }
  .v2 .fx-lightning.on { animation: none !important; opacity: .32; }
  .v2 .fx-lightning.on path { animation: none !important; stroke-dashoffset: 0; filter: none; }
  .v2 .chance-banner.show:not(.hide) {
    animation: none !important;
    transform: translate(-50%, -50%);
    opacity: 1;
    width: min(90vw, 720px);
    text-align: center;
    white-space: normal;
  }
  .v2 .floater { animation: none !important; transform: none; opacity: .8; }
}
