/* SHADOW VOX PROTOTYPE — isolated from the minigame UI. */
#shadow-vox-stage {
  position: fixed;
  inset: 0;
  z-index: 38;
  pointer-events: none;
  overflow: hidden;
  display: block;
  visibility: hidden;
  opacity: 0;
  transform: translateZ(0);
  will-change: opacity, visibility;
}
#shadow-vox-stage.shadow-visible { visibility: visible; opacity: 1; }
#shadow-vox-box {
  position: absolute;
  transform-origin: center center;
  pointer-events: none;
  will-change: left, top, width, height, transform, -webkit-mask-image, mask-image;
}
#shadow-vox-box > video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: fill;
  opacity: 0;
  display: block;
  pointer-events: none;
}
#shadow-vox-debug {
  position: fixed;
  left: 12px;
  top: 12px;
  z-index: 10000;
  width: 390px;
  padding: 10px;
  border: 1px solid rgba(230,190,85,.75);
  border-radius: 8px;
  background: rgba(7,8,15,.92);
  color: #f2e9d0;
  font: 12px/1.35 Arial,sans-serif;
  pointer-events: auto;
}
#shadow-vox-debug.hidden { display:none !important; }
#shadow-vox-debug button {
  margin: 7px 6px 0 0;
  padding: 6px 9px;
  border: 1px solid rgba(230,190,85,.7);
  border-radius: 5px;
  background: rgba(45,30,75,.95);
  color: #fff;
  cursor: pointer;
}
#shadow-vox-debug button:disabled { opacity:.45; cursor:default; }
#shadow-vox-debug-status { white-space:pre-wrap; }


/* V0.12.53 — Shadow Mood Bubble.
   This layer is only visible while Shadow Vox owns the public presence.
   The FIGHT owner never sees it; spectators with the Extension do. */
#shadow-mood-stage {
  position: fixed;
  z-index: 39;
  left: 0;
  top: 0;
  width: 0;
  height: 0;
  pointer-events: none;
  overflow: visible;
  visibility: hidden;
  opacity: 0;
  transform: translateZ(0);
  transition: opacity 120ms linear;
}
#shadow-mood-stage.shadow-mood-visible {
  visibility: visible;
  opacity: 1;
}
.shadow-mood-bubble {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  box-sizing: border-box;
  overflow: visible;
  pointer-events: none;
  isolation: isolate;
}
.shadow-mood-shape {
  position: absolute;
  left: 0;
  top: 0;
  overflow: visible;
  pointer-events: none;
  filter: drop-shadow(0 0 7px rgba(214,168,54,.14)) drop-shadow(0 5px 9px rgba(0,0,0,.22));
}
.shadow-mood-path {
  fill: #f6eddc;
  stroke: #d6a836;
  stroke-width: 2.65px;
  stroke-linejoin: round;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
}
.shadow-mood-icon-slot {
  position: absolute;
  z-index: 4;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  overflow: visible;
  pointer-events: none;
}
.shadow-mood-icon {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: contain;
  pointer-events: none;
}
.shadow-mood-bubble.severity-normal {
  animation: voxShadowMoodBlinkNormal var(--shadow-mood-blink-total-ms, 12000ms) linear infinite;
}
.shadow-mood-bubble.severity-warning {
  animation: voxShadowMoodBlinkWarning var(--shadow-mood-blink-total-ms, 6200ms) linear infinite;
}
.shadow-mood-bubble.severity-urgent {
  animation: voxShadowMoodBlinkUrgent var(--shadow-mood-blink-total-ms, 2350ms) linear infinite;
}
.shadow-mood-bubble.severity-warning .shadow-mood-path {
  stroke: #ff9d16;
  stroke-width: 3px;
  animation: voxShadowMoodWarningStroke var(--shadow-mood-blink-total-ms, 6200ms) linear infinite;
}
.shadow-mood-bubble.severity-urgent .shadow-mood-path {
  stroke: #ff2418;
  stroke-width: 3.15px;
  animation: voxShadowMoodUrgentStroke var(--shadow-mood-blink-total-ms, 2350ms) linear infinite;
}
.shadow-mood-bubble.severity-warning .shadow-mood-shape {
  filter: drop-shadow(0 0 7px rgba(255,143,0,.30)) drop-shadow(0 5px 9px rgba(0,0,0,.22));
}
.shadow-mood-bubble.severity-urgent .shadow-mood-shape {
  filter: drop-shadow(0 0 8px rgba(255,35,20,.46)) drop-shadow(0 5px 9px rgba(0,0,0,.23));
}
@keyframes voxShadowMoodBlinkNormal {
  0%, 54% { opacity: 1; }
  62%, 92% { opacity: 0; }
  100% { opacity: 1; }
}
@keyframes voxShadowMoodBlinkWarning {
  0%, 54% { opacity: 1; }
  61%, 92% { opacity: 0; }
  100% { opacity: 1; }
}
@keyframes voxShadowMoodBlinkUrgent {
  0%, 56% { opacity: 1; }
  68%, 88% { opacity: 0; }
  100% { opacity: 1; }
}
@keyframes voxShadowMoodWarningStroke {
  0%, 57%, 100% { filter: drop-shadow(0 0 1px rgba(255,146,0,.16)); }
  65%, 95% { filter: drop-shadow(0 0 5px rgba(255,146,0,.54)); }
}
@keyframes voxShadowMoodUrgentStroke {
  0%, 60%, 100% { filter: drop-shadow(0 0 2px rgba(255,35,20,.30)); }
  73%, 92% { filter: drop-shadow(0 0 8px rgba(255,35,20,.72)); }
}
