/* The parent still owns downstream motion; only the hull, letters, and wake resolve. */
.board-reveal-fx {
  --clear-gold: #ffe5a0;
  --clear-foam: #d9fff1;
  position: absolute;
  inset: -24%;
  z-index: 3;
  pointer-events: none;
  display: none;
}
.drifter.resolved, .drifter.resolved .tile { pointer-events: none; }
.drifter.resolved .board-label {
  color: #fff1c5;
  border-color: #e9d394;
  background: #294536;
  box-shadow: 0 0 12px #ffe4a066, 0 2px 5px #1832269c;
}
.drifter.resolved .board-label small { color: #feebae; }
.drifter.resolved .path-links { opacity: 0; }
.playfield[data-phase='RIVER_FLOW'] .drifter.resolved:not(.boss)::after,
.playfield[data-phase='RIVER_FLOW'] .drifter.resolved:not(.boss) .tile-grid::after { display: none; }

@media (prefers-reduced-motion: reduce) {
  .drifter.resolved:not(.boss)::before,
  .drifter.resolved:not(.boss) :is(.object-art, .tile-grid) { opacity: .35; }
}

@media (prefers-reduced-motion: no-preference) {
  .drifter.resolved .board-reveal-fx {
    display: block;
    background:
      radial-gradient(circle at 19% 43%, #fffbe3 0 1px, #ffd78b 2px 3px, transparent 5px),
      radial-gradient(circle at 24% 62%, var(--clear-gold) 0 2px, transparent 4px),
      radial-gradient(circle at 35% 24%, #fffbe3 0 2px, transparent 4px),
      radial-gradient(circle at 38% 45%, var(--clear-foam) 0 1px, transparent 4px),
      radial-gradient(circle at 45% 35%, var(--clear-gold) 0 2px, transparent 6px),
      radial-gradient(circle at 55% 24%, #fffbe3 0 2px, #ffd78b 3px, transparent 5px),
      radial-gradient(circle at 63% 39%, var(--clear-gold) 0 2px, transparent 4px),
      radial-gradient(circle at 67% 19%, var(--clear-foam) 0 1px, transparent 4px),
      radial-gradient(circle at 73% 46%, #fffbe3 0 2px, #ffd78b 3px, transparent 5px),
      radial-gradient(circle at 83% 56%, var(--clear-gold) 0 2px, transparent 4px);
    animation: clear-fireflies 1.06s cubic-bezier(.2, .65, .28, 1) both;
  }
  .drifter.resolved .board-reveal-fx::before,
  .drifter.resolved .board-reveal-fx::after {
    position: absolute;
    content: '';
  }
  .drifter.resolved .board-reveal-fx::before {
    inset: 11% 9% 18%;
    background: radial-gradient(ellipse, #fff6ba9e 0, #fee6a257 29%, #b6ffe925 48%, transparent 68%);
    animation: clear-halo .82s ease-out both;
  }
  .drifter.resolved .board-reveal-fx::after {
    inset: 69% 14% 18%;
    border: 2px solid var(--clear-foam);
    border-radius: 50%;
    box-shadow: 0 0 5px #c0fff5a9, 0 0 0 5px #d8ffeb4d, 0 0 0 10px #e5fff62a;
    animation: clear-wake 1s ease-out both;
  }
  .drifter.resolved:not(.boss)::before,
  .drifter.resolved:not(.boss) .object-art {
    animation: clear-hull 1.05s ease-in-out both;
  }
  .drifter.resolved:not(.boss) .object-art { --clear-art-center: translate(-50%, -50%); }
  .drifter.resolved:not(.boss) .tile {
    animation: clear-glyph .7s cubic-bezier(.17, .68, .37, 1) var(--clear-delay, 0ms) both;
  }
  .drifter.resolved:not(.boss) .board-label { animation: clear-banner 1.7s ease-out both; }
  .drifter.resolved:not(.boss) .tile:is([data-row='1'], [data-row='4']) { --clear-delay: 55ms; }
  .drifter.resolved:not(.boss) .tile:is([data-row='2'], [data-row='5']) { --clear-delay: 110ms; }
  .drifter.resolved:not(.boss) .tile:is([data-row='3'], [data-row='6']) { --clear-delay: 150ms; }
  .drifter.resolved.boss .board-reveal-fx {
    --clear-gold: #def4b2;
    animation-duration: 1.2s;
  }
  .drifter.resolved.boss .board-reveal-fx::after { inset: 73% 8% 14%; }
  .drifter.resolved.boss::before,
  .drifter.resolved.boss .object-art,
  .drifter.resolved.boss .tile-grid {
    animation: clear-guardian 1s ease-out both;
  }
}

@keyframes clear-fireflies {
  0% { opacity: 0; background-size: 52% 52%; background-position: center; background-repeat: no-repeat; }
  24% { opacity: 1; }
  53% { opacity: 1; }
  100% { opacity: 0; background-size: 106% 120%; background-position: center; background-repeat: no-repeat; }
}
@keyframes clear-halo {
  0% { opacity: 0; transform: scale(.65); }
  23% { opacity: .92; }
  100% { opacity: 0; transform: scale(1.35); }
}
@keyframes clear-wake {
  0% { opacity: 0; transform: scale(.64, .55); }
  22% { opacity: .86; }
  100% { opacity: 0; transform: scale(1.68, 1.65) translateY(8px); }
}
@keyframes clear-hull {
  0% { opacity: 1; transform: var(--clear-art-center, translate(0, 0)); }
  15% { transform: var(--clear-art-center, translate(0, 0)) translateY(5px) scale(.98, .975); }
  42% { opacity: 1; filter: brightness(1.44) saturate(1.16); transform: var(--clear-art-center, translate(0, 0)) translateY(-12px) scale(1.035); }
  100% { opacity: 0; filter: brightness(1.14); transform: var(--clear-art-center, translate(0, 0)) translate(5px, 24px) scale(.8, .86); }
}
@keyframes clear-glyph {
  0% { opacity: 1; }
  30% { opacity: .98; filter: brightness(1.6) sepia(.18); transform: translateY(-4px) scale(.98); }
  100% { opacity: 0; transform: translateY(-16px) scale(.7); }
}
@keyframes clear-guardian {
  0% { filter: brightness(1); }
  34% { filter: brightness(1.38) drop-shadow(0 0 9px #d6f6a496); }
  100% { filter: brightness(1.1) drop-shadow(0 0 2px #d6f6a448); }
}
@keyframes clear-banner {
  0% { opacity: 0; translate: 0 6px; }
  17%, 64% { opacity: 1; translate: 0 0; }
  100% { opacity: 0; translate: 0 -12px; }
}
.guardian-blessing {
  position:absolute; z-index:4; inset:auto 10px 9% 10px; margin:auto; width:max-content; max-width:calc(100% - 20px);
  display:grid; gap:.25rem; text-align:center; padding:.55rem clamp(.8rem,3vw,1.5rem);
  border:1px solid #edcd86; border-radius:3px 14px; color:#fff3ce; background:#172f29f2;
  font:600 clamp(.94rem,2vmin,1.25rem)/1.2 Georgia,serif; pointer-events:none;
  box-shadow:0 0 30px #e8d38a70; animation:blessing-rise .45s ease-out both;
}
.guardian-blessing strong { color:#ffe8a2; font-size:1.28em; }
.guardian-blessing span { font-style:italic; }
.blessing-embers { position:absolute; z-index:3; inset:0; overflow:hidden; pointer-events:none; }
.blessing-embers i {
  position:absolute; left:50%; top:65%; color:#fff3b4; text-shadow:0 0 9px #ffe2a5,0 0 20px #aafbea;
  font-size:clamp(12px,2vmin,22px); opacity:0;
  animation:blessing-ember 1s var(--ember-delay) ease-out both;
}
.playfield.is-surging .voyage-track b { background:#c4ffe3; box-shadow:0 0 15px #82ffcf; }
.result-time-bonus { color:#d7f5b6; font-weight:800; }
@keyframes blessing-rise { from { transform:translateY(10px); opacity:0; } to { transform:translateY(0); opacity:1; } }
@keyframes blessing-ember {
  12% { opacity:1; }
  70% { opacity:.75; }
  to { opacity:0; transform:translate(var(--ember-x),var(--ember-y)) scale(.4); }
}
@media (prefers-reduced-motion:reduce) {
  .guardian-blessing { animation:none; }
  .blessing-embers { display:none; }
}

.playfield.is-voyage .drifter.cargo-leaving .board-label {
  border-color:#f7ad6e;
  box-shadow:inset 0 1px #ffd1a156,0 0 0 1px #7b3f24,0 0 13px #f1965570;
}
.playfield.is-voyage .drifter.banked-bonus .board-label small { color:#d6ffc8; }
.playfield.is-voyage .drifter.cargo-leaving .cargo-clock {
  color:#fff0c7; background:#763b25; border:1px solid #ffd297; border-radius:5px; padding:2px 5px;
}
.playfield.is-voyage .drifter.banked-bonus .cargo-meter { display:none; }
#bonus-cargo {
  display:flex;
  flex-wrap:wrap;
  justify-content:center;
  gap:5px;
  width:100%;
}
#bonus-cargo .drifter.held-cargo {
  --tile-size:clamp(28px, 4vmin, 36px);
  position:relative;
  inset:auto;
  min-width:0;
  width:max-content;
  max-width:100%;
  gap:4px;
  padding:4px 7px 6px;
  border:1px solid #e7c781;
  border-radius:9px 4px;
  background:linear-gradient(145deg,#334f4c,#142e33);
  box-shadow:0 4px 12px #102c4070;
  transform:none;
  animation:none;
}
#bonus-cargo .held-cargo :is(.cargo-hull,.cargo-wake,.cargo-clue,.board-label small,.departure-cue) { display:none; }
#bonus-cargo .held-cargo::before,
#bonus-cargo .held-cargo::after,
#bonus-cargo .held-cargo .tile-grid::after { display:none; }
#bonus-cargo .held-cargo .tile-grid { gap:2px; }
#bonus-cargo .held-cargo .tile:not(.charred) { pointer-events:auto; }
#bonus-cargo .held-cargo .board-label { gap:5px; padding:3px; }
#bonus-cargo .held-cargo .board-label strong { font-size:.8em; }
#bonus-cargo .held-cargo .tile-value { inset-inline-end:12%; inset-block-end:10%; }
#bonus-cargo .held-cargo .cargo-clock { color:#ffedaf; }
@media (prefers-reduced-motion: no-preference) {
  /* Tremble the animal or hull, not the clickable letter sockets. */
  .playfield.is-voyage .drifter.cargo-leaving:not(.resolved) .cargo-hull {
    transform-origin:center;
    animation:cargo-last-call 1.45s ease-in-out infinite;
  }
}
@keyframes cargo-last-call {
  0%, 16%, 100% { transform:translateX(0) rotate(0); }
  4% { transform:translateX(-2px) rotate(-.65deg); }
  8% { transform:translateX(2px) rotate(.65deg); }
  12% { transform:translateX(-1px) rotate(-.3deg); }
}
