/*
 * landing-mundo — estilos del mini-mundo interactivo "planta viva" del hero de
 * /inicio: banda de avatares, muebles, pill de nombre, reunión de proximidad,
 * selección/popover, chat/emoji y editor de mapa. Separado de landing.css para
 * mantener ambos archivos ≤500 líneas (mismo criterio que el split del JS en
 * landing-objetos/avatares/editor/social/guion). Consume las variables :root
 * (--live, --ink, --surface, --border, --font-*) definidas en landing.css, que
 * DEBE cargar antes que este archivo.
 */

/* ── Banda "planta viva": avatares reales caminando sobre la grilla ── */
.world-band {
  position: relative; max-width: 940px; margin: 56px auto 0; height: 132px;
  border: 1px solid var(--border); border-radius: var(--radius-lg) var(--radius-lg) 0 0;
  background-color: var(--surface-2); background-image: var(--grid-lines);
  background-size: 36px 36px; overflow: visible;
}
/* Glow de "suelo"; overflow visible deja salir el HUD/burbujas hacia arriba,
   así que el glow se recorta a la forma redondeada con su propio radius. */
.world-band::after {
  content: ""; position: absolute; inset: 0; pointer-events: none; border-radius: inherit;
  background: radial-gradient(85% 130% at 50% 130%, color-mix(in srgb, var(--live) 13%, transparent), transparent 72%);
}
.pv-avatar {
  position: absolute; top: 0; left: 0; width: 64px; height: 64px; z-index: 3;
  background-repeat: no-repeat; image-rendering: pixelated; touch-action: none;
  will-change: transform, background-position;
  filter: drop-shadow(0 6px 5px color-mix(in srgb, var(--ink) 22%, transparent));
}
/* ── Muebles ── */
.pv-prop {
  position: absolute; top: 0; left: 0; z-index: 1;
  background-repeat: no-repeat; background-size: contain; background-position: center bottom;
  image-rendering: pixelated; touch-action: none;
  filter: drop-shadow(0 5px 4px color-mix(in srgb, var(--ink) 18%, transparent));
}
.pv-prop.under { z-index: 0; filter: none; opacity: .96; }
.pv-editable .pv-avatar, .pv-editable .pv-prop { cursor: grab; }
.pv-grabbing { cursor: grabbing !important; filter: drop-shadow(0 10px 8px color-mix(in srgb, var(--ink) 34%, transparent)); }

/* ── Pill de nombre sobre el avatar (patrón Gather; fiel a AvatarNamePill del
   producto: pill slate-900 + dot verde de "activo" + texto blanco). Se oculta
   en reunión, ahí el nombre lo muestra el tile de la cámara. */
.pv-nametag {
  position: absolute; top: 0; left: 0; z-index: 4; pointer-events: none;
  display: inline-flex; align-items: center; gap: 6px; max-width: 148px;
  padding: 3px 9px; border-radius: 999px; background: rgba(15, 23, 42, .92); color: #fff;
  font-family: var(--font-body); font-size: 11px; font-weight: 600; line-height: 1.2;
  white-space: nowrap; overflow: hidden; box-shadow: 0 2px 6px rgba(0,0,0,.35);
  transition: opacity .16s ease;
}
.pv-nametag.oculto { opacity: 0; }
.pv-nametag span { overflow: hidden; text-overflow: ellipsis; }
.pv-nametag-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--presence); flex-shrink: 0; box-shadow: 0 0 0 2px color-mix(in srgb, var(--presence) 24%, transparent); }

/* ── Reunión de proximidad — fiel a MeetingViewGrid/MeetingViewTile del
   producto: tiles RECTANGULARES (radio 12, fondo oscuro), placeholder
   gradiente azul→violeta con iniciales mientras "carga la cámara", pill
   nombre+mic abajo-izquierda, dot verde de presencia, borde verde del que
   habla; más el aro punteado verde de la conversación y el roster de nombres. */
/* z sobre la barra del editor (z-8): las tiles van encima de los avatares y
   pueden cubrir la barra brevemente mientras dura la reunión. */
.pv-meet { position: absolute; top: 0; left: 0; z-index: 9; display: flex; gap: 7px; transition: opacity .3s ease; opacity: 1; }
.pv-meet.out { opacity: 0; }
.pv-tile {
  position: relative; width: 80px; height: 58px; border-radius: 12px; overflow: hidden; background: #0b1020;
  box-shadow: 0 12px 26px color-mix(in srgb, var(--ink) 34%, transparent), 0 0 0 1px rgba(0,0,0,.22);
  transition: box-shadow .18s ease;
}
.pv-tile.speaking { box-shadow: 0 12px 26px color-mix(in srgb, var(--ink) 34%, transparent), 0 0 0 3px var(--presence); }
.pv-tile video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .35s ease; }
.pv-tile.ready video { opacity: 1; }
.pv-tile-ph {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  color: #fff; font-family: var(--font-display); font-weight: 700; font-size: 26px; letter-spacing: .02em;
  background: linear-gradient(135deg, rgba(50,115,255,.55) 0%, rgba(180,80,255,.55) 100%);
  transition: opacity .35s ease;
}
.pv-tile.ready .pv-tile-ph { opacity: 0; }
.pv-tile-load { position: absolute; left: 0; right: 0; bottom: 6px; z-index: 1; display: flex; align-items: center; justify-content: center; gap: 4px; font-family: var(--font-mono); font-size: 8px; letter-spacing: .02em; color: rgba(255,255,255,.94); text-shadow: 0 1px 2px rgba(0,0,0,.55); }
.pv-tile.ready .pv-tile-load { display: none; }
.pv-spin { width: 11px; height: 11px; border-radius: 50%; border: 2px solid rgba(255,255,255,.3); border-top-color: var(--live); }
.pv-tile-bar { position: absolute; left: 5px; bottom: 5px; z-index: 2; display: flex; align-items: center; gap: 4px; max-width: calc(100% - 10px); padding: 2px 7px; border-radius: 999px; background: rgba(0,0,0,.55); color: #fff; font-size: 9.5px; font-weight: 600; }
.pv-tile-bar span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pv-tile-mic { display: inline-flex; color: #ff6b6b; }
.pv-tile-dot { position: absolute; right: 6px; bottom: 7px; z-index: 2; width: 8px; height: 8px; border-radius: 50%; background: var(--presence); box-shadow: 0 0 0 2px rgba(0,0,0,.35); }
.pv-ring { position: absolute; top: 0; left: 0; z-index: 2; border: 2px dashed color-mix(in srgb, var(--presence) 78%, transparent); border-radius: 50%; pointer-events: none; transition: opacity .3s ease; }
.pv-roster {
  position: absolute; top: 0; left: 0; z-index: 5; display: flex; align-items: center; gap: 9px;
  padding: 3px 9px; border-radius: 999px; background: rgba(10,14,24,.82); color: #fff;
  font-size: 10px; font-weight: 600; white-space: nowrap;
  box-shadow: 0 6px 16px color-mix(in srgb, var(--ink) 22%, transparent); transition: opacity .3s ease; opacity: 1;
}
.pv-roster.out { opacity: 0; }
.pv-roster i { display: inline-flex; align-items: center; gap: 4px; font-style: normal; }
.pv-roster i::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--presence); }
/* Etiqueta "Bloqueada" sobre el aro (candado ámbar, como en el producto). */
.pv-lock {
  position: absolute; top: 0; left: 0; z-index: 5; display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 9px; border-radius: 999px; background: rgba(10,14,24,.86); color: #fff;
  font-size: 9.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap;
  box-shadow: 0 6px 16px color-mix(in srgb, var(--ink) 22%, transparent); transition: opacity .3s ease;
}
.pv-lock.out { opacity: 0; }
.pv-lock svg { color: #f7b955; }

/* Aro de selección al piso (pulsa suave). */
.pv-selring {
  position: absolute; top: 0; left: 0; z-index: 2; pointer-events: none; border-radius: 50%;
  border: 2px solid color-mix(in srgb, var(--live) 88%, transparent);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--live) 16%, transparent);
}

/* Popover de acciones (Toque / Ir a / Chat), fiel al Player Profile Card. */
.pv-pop {
  position: absolute; top: 0; left: 0; z-index: 12; display: flex; flex-direction: column; gap: 6px;
  padding: 8px 9px 9px; border-radius: 14px; background: var(--surface); border: 1px solid var(--card-border);
  box-shadow: 0 14px 30px color-mix(in srgb, var(--ink) 24%, transparent);
}
.pv-pop::after { content: ""; position: absolute; left: 50%; bottom: -5px; width: 10px; height: 10px; transform: translateX(-50%) rotate(45deg); background: var(--surface); border-right: 1px solid var(--card-border); border-bottom: 1px solid var(--card-border); }
.pv-pop-name { font-family: var(--font-mono); font-size: 10px; letter-spacing: .05em; text-transform: uppercase; color: var(--ink-soft); padding: 0 2px; }
.pv-pop-row { display: flex; align-items: center; gap: 6px; }
.pv-pop-btn {
  appearance: none; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
  padding: 6px 11px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface);
  color: var(--ink); font: inherit; font-size: 12px; font-weight: 600; line-height: 1;
  transition: transform .1s ease, border-color .1s ease, background .1s ease;
}
.pv-pop-btn .pv-ic { font-size: 13px; line-height: 1; }
.pv-pop-btn:hover { transform: translateY(-1px); border-color: var(--live); }
.pv-pop-btn.primary { background: var(--cta-a); border-color: var(--cta-a); color: #fff; box-shadow: 0 6px 16px color-mix(in srgb, var(--cta-a) 40%, transparent); }
.pv-pop-btn.primary:hover { background: var(--cta-b); border-color: var(--cta-b); }

/* ── Burbuja de chat + emoji ── */
.pv-bubble {
  position: absolute; top: 0; left: 0; z-index: 6; max-width: 150px;
  background: var(--surface); border: 1px solid var(--card-border); color: var(--ink);
  font-size: 12.5px; line-height: 1.3; padding: 6px 10px; border-radius: 12px;
  box-shadow: 0 8px 20px color-mix(in srgb, var(--ink) 20%, transparent);
  white-space: nowrap; transition: opacity .3s ease, transform .3s ease;
}
.pv-bubble::after { content: ""; position: absolute; left: 16px; bottom: -5px; width: 9px; height: 9px; background: var(--surface); border-right: 1px solid var(--card-border); border-bottom: 1px solid var(--card-border); transform: rotate(45deg); }
.pv-bubble.out { opacity: 0; transform: translateY(-4px); }
.pv-emoji { position: absolute; top: 0; left: 0; z-index: 6; font-size: 22px; pointer-events: none; transform: translate(-50%, 0); }

/* ── Editor de mapa (menú colapsado → panel por categorías) ── */
.pv-editbar { position: absolute; top: 8px; right: 8px; z-index: 8; display: flex; align-items: center; padding: 5px 9px; border-radius: 999px; background: color-mix(in srgb, var(--surface) 94%, transparent); border: 1px solid var(--card-border); box-shadow: 0 6px 16px color-mix(in srgb, var(--ink) 14%, transparent); }
.pv-editbar.abierto { z-index: 12; }
.pv-editbar.lleno { animation: pv-shake .5s ease; }
.pv-edittoggle { appearance: none; border: 0; background: transparent; cursor: pointer; line-height: 1; display: inline-flex; align-items: center; gap: 5px; padding: 1px 2px; font-family: var(--font-mono); font-size: 11px; letter-spacing: .03em; color: var(--ink-soft); transition: color .12s ease; }
.pv-edittoggle:hover, .pv-editbar.abierto .pv-edittoggle { color: var(--live); }
.pv-edittoggle svg, .pv-del svg { display: block; }
.pv-edittools { display: none; position: absolute; top: calc(100% + 7px); right: 0; z-index: 12; flex-direction: column; gap: 9px; width: min(324px, 80vw); max-height: min(300px, 56vh); overflow-y: auto; padding: 11px 12px; border-radius: 14px; background: color-mix(in srgb, var(--surface) 98%, transparent); border: 1px solid var(--card-border); box-shadow: 0 14px 34px color-mix(in srgb, var(--ink) 20%, transparent); }
.pv-editbar.abierto .pv-edittools { display: flex; }
.pv-edithint { font-family: var(--font-mono); font-size: 10px; letter-spacing: .04em; color: var(--ink-soft); }
.pv-cat { display: flex; flex-direction: column; gap: 5px; }
.pv-cat-h { font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft); opacity: .85; }
.pv-cat-row { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; }
.pv-add { appearance: none; border: 1px solid var(--border); background: var(--surface); cursor: pointer; border-radius: 9px; padding: 5px 2px 4px; display: flex; flex-direction: column; align-items: center; gap: 3px; transition: transform .1s ease, border-color .1s ease; }
.pv-add:hover { transform: translateY(-1px); border-color: var(--live); }
.pv-add-img { width: 30px; height: 30px; background-repeat: no-repeat; background-position: center; image-rendering: pixelated; }
.pv-add-cap { max-width: 100%; overflow: hidden; font-size: 8.5px; line-height: 1.1; color: var(--ink-soft); text-align: center; white-space: nowrap; text-overflow: ellipsis; }
.pv-del { align-self: flex-start; appearance: none; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; padding: 5px 11px; border-radius: 999px; border: 1px solid var(--card-border); background: var(--surface); color: var(--ink-soft); font-family: var(--font-mono); font-size: 10.5px; letter-spacing: .03em; transition: color .12s ease, background .12s ease, border-color .12s ease; }
.pv-del:hover { color: #ef4444; border-color: #ef4444; }
.pv-del.activo { background: #ef4444; border-color: #ef4444; color: #fff; }
.pv-borrando .pv-prop { cursor: crosshair; }
.pv-borrando .pv-prop:hover { outline: 2px solid #ef4444; outline-offset: 1px; }

@media (prefers-reduced-motion: no-preference) {
  .pv-spin { animation: pv-spin 0.8s linear infinite; }
  .pv-emoji { animation: pv-float 1.5s ease-out forwards; }
  .pv-prop.recien { animation: pv-pop .35s ease; }
  .pv-selring { animation: pv-selpulse 1.4s ease-in-out infinite; }
  .pv-pop { animation: pv-pop-in .16s ease; }
}
@keyframes pv-spin { to { transform: rotate(360deg); } }
@keyframes pv-float { 0% { opacity: 0; transform: translate(-50%, 0) scale(.6); } 20% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%, -46px) scale(1.1); } }
/* Sin transform (usan transform inline para posicionarse): solo opacidad/anillo. */
@keyframes pv-pop { 0% { opacity: .25; box-shadow: 0 0 0 6px color-mix(in srgb, var(--live) 45%, transparent); } 100% { opacity: 1; box-shadow: 0 0 0 0 transparent; } }
@keyframes pv-selpulse { 0%,100% { opacity: .9; } 50% { opacity: .4; } }
@keyframes pv-pop-in { from { opacity: 0; } to { opacity: 1; } }
@keyframes pv-shake { 0%,100%{transform:translateX(0)} 25%{transform:translateX(-4px)} 75%{transform:translateX(4px)} }

/* Overrides móviles del mundo (≤720px) — extraídos del bloque mobile de landing.css. */
@media (max-width: 720px) {
  .world-band { height: 108px; margin-top: 44px; }
  .pv-avatar { width: 52px; height: 52px; }
  .pv-edithint { display: none; }
  .pv-edittoggle span { display: none; }
  .pv-editbar { top: 6px; right: 6px; padding: 5px 7px; }
  .pv-edittools { width: min(300px, 84vw); padding: 9px 10px; gap: 8px; }
  .pv-add-img { width: 26px; height: 26px; }
  .pv-add-cap { font-size: 8px; }
  .pv-nametag { font-size: 10px; padding: 2px 7px; gap: 5px; max-width: 118px; }
  .pv-tile { width: 62px; height: 46px; }
  .pv-tile-ph { font-size: 20px; }
  .pv-tile-bar { font-size: 8.5px; padding: 2px 5px; }
  .pv-roster { font-size: 9px; gap: 7px; padding: 2px 7px; }
  .pv-lock { font-size: 8.5px; padding: 2px 7px; }
  .pv-pop-btn { padding: 5px 8px; font-size: 11px; }
}
