.celebration{position:absolute;z-index:7;left:50%;top:43%;width:158px;pointer-events:none;opacity:0;transform:translate3d(-50%,-40%,0) scale(.72);text-align:center;background:linear-gradient(150deg,#193951ed,#0b2136ec);border:1px solid var(--trace-color,#f1d18f);border-radius:22px;padding:8px 8px 10px;box-shadow:0 7px 30px #0009,0 0 18px var(--trace-color,#e8c88e);will-change:transform,opacity}
.celebration.is-showing{animation:successCameo .76s ease-out forwards}
.celebration.big-win.is-showing{animation-duration:.98s}
.celebration-art{height:105px;display:grid;place-items:center}
.celebration-art svg{max-height:105px;width:auto;max-width:120px;filter:drop-shadow(0 2px 5px #0008)}
.celebration-caption{font-size:10px;font-weight:900;letter-spacing:1.4px;color:#f5e7c8;margin:3px auto 4px}
.celebration-word{font-size:13px;font-weight:800;color:var(--trace-color,#edc588)}
.celebration.is-showing .captain-hat{transform-box:fill-box;transform-origin:20% 80%;animation:captainTip .76s ease-in-out}
@keyframes captainTip{40%{transform:rotate(-18deg) translateY(-4px)}70%{transform:rotate(-8deg) translateY(-2px)}100%{transform:none}}
@keyframes successCameo{0%{opacity:0;transform:translate3d(-50%,-35%,0) scale(.68)}18%{opacity:1;transform:translate3d(-50%,-50%,0) scale(1.04)}70%{opacity:1;transform:translate3d(-50%,-50%,0) scale(1)}100%{opacity:0;transform:translate3d(-50%,-57%,0) scale(.9)}}
html[data-motion="off"] .celebration:not(.is-rejected){display:none!important}
@media(prefers-reduced-motion:reduce){.celebration:not(.is-rejected){display:none!important}}

/* A playful failure cameo uses the same slot as success but reads differently. */
.celebration.is-rejected{background:linear-gradient(150deg,#382a4ded,#1c2638f4);border-color:#f69f9e;box-shadow:0 7px 30px #0009,0 0 18px #f18d9566}
.celebration.is-rejected .celebration-word{color:#ffcbac;font-size:11px;overflow-wrap:anywhere}
.celebration.is-rejected.is-showing{animation:rejectionCameo 1.95s ease-out forwards}
@keyframes rejectionCameo{
  0%{opacity:0;transform:translate3d(-50%,-40%,0) scale(.65) rotate(-8deg)}
  17%{opacity:1;transform:translate3d(-50%,-51%,0) scale(1.06) rotate(4deg)}
  32%{transform:translate3d(-50%,-50%,0) scale(.98) rotate(-3deg)}
  45%,76%{opacity:1;transform:translate3d(-50%,-50%,0) scale(1) rotate(0)}
  100%{opacity:0;transform:translate3d(-50%,-59%,0) scale(.88)}
}

/* Illustrated world cameos share one optimized sprite sheet (8 success + 8 failure).
   Images are local assets; no third-party requests or user data exposure. */
.celebration{width:clamp(174px,49vw,218px);padding:9px 10px 12px}
.celebration-art{height:126px}
.world-cameo{width:128px;height:128px;border-radius:14px;
  background-image:url("assets/worlds/cameos.webp?v=20261013-polish-v1");
  background-size:800% 200%;background-repeat:no-repeat;
  border:1px solid #ffffff55;box-shadow:0 3px 9px #0007}
.celebration.is-rejected .celebration-word{color:#fff2db;font-size:14px;letter-spacing:.4px}
.celebration-reason{display:none;margin:7px 1px 0;line-height:1.35;font-size:11px;
  font-weight:680;color:#fff0e1;overflow-wrap:anywhere}
.celebration.is-rejected .celebration-reason{display:block}
@media(prefers-reduced-motion:reduce){
  .celebration.is-rejected.is-showing{animation:none;opacity:1;
     transform:translate3d(-50%,-50%,0) scale(1)}
}
html[data-motion="off"] .celebration.is-rejected.is-showing{
  animation:none;opacity:1;transform:translate3d(-50%,-50%,0) scale(1)}

/* An image-load probe switches from a lightweight themed glyph fallback to the
   real sixteen-art sprite when the generated art has been installed. */
.world-cameo{display:grid;place-items:center;overflow:hidden;
 background-color:#34495b}
.world-cameo span{width:100%;height:100%;display:grid;place-items:center;
 font-size:66px;background:radial-gradient(circle at 40% 30%,#fff6,#0005);
 text-shadow:0 3px 9px #0009}
html[data-world-art="ready"] .world-cameo span{display:none}
.world-tabletop{background-color:#896041}.world-library{background-color:#3c335b}
.world-tidepool{background-color:#127d98}.world-arcade{background-color:#63218e}
.world-garden{background-color:#537b53}.world-clockwork{background-color:#87653f}
.world-observatory{background-color:#303e85}.world-paper{background-color:#87505c}
