:root{--bg:#0f1218;--panel:#181c25;--tile:#1f2430;--txt:#e8ecf4;--dim:#9aa4b8;--acc:#4f8cff;--ok:#2fb36d;--mal:#e5484d;--mano:#f5a524}
@media (prefers-color-scheme:light){:root:not([data-forzar]){--bg:#f3f5f9;--panel:#fff;--tile:#dfe4ee;--txt:#171b24;--dim:#5b667a}}
*{box-sizing:border-box}
html,body{height:100%;margin:0;background:var(--bg);color:var(--txt);font:15px/1.4 "Segoe UI",system-ui,sans-serif}
button,input{font:inherit;color:inherit}
.centro{min-height:100%;display:grid;place-items:center;padding:16px}
.caja{width:100%;max-width:380px;background:var(--panel);border-radius:14px;padding:28px 24px;display:grid;gap:14px}
.caja h1{margin:0;font-size:22px}.caja p{margin:0;color:var(--dim)}
label{display:grid;gap:4px;font-size:13px;color:var(--dim)}
input[type=text]{background:var(--bg);border:1px solid #2c3446;border-radius:8px;padding:11px 12px;color:var(--txt);font-size:17px}
input.codigo{letter-spacing:.15em;text-transform:uppercase;text-align:center;font-size:22px}
.btn{background:var(--acc);border:0;border-radius:8px;padding:11px 16px;color:#fff;font-weight:600;cursor:pointer}
.btn.sec{background:var(--tile);color:var(--txt)}.btn.mal{background:var(--mal)}
.err{color:var(--mal);min-height:1.4em;font-size:14px}
/* sala */
#app{height:100%;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr auto}
#barra{grid-column:1/3;display:flex;gap:12px;align-items:center;padding:8px 14px;background:var(--panel);font-size:14px}
#barra .sp{flex:1}.rec{color:var(--mal);font-weight:700}.rec::before{content:"● "}
#escena{position:relative;overflow:hidden;background:#000;min-height:0}
.tile{position:absolute;overflow:hidden;background:var(--tile);border-radius:6px;transition:left .25s,top .25s,width .25s,height .25s}
.tile video{width:100%;height:100%;object-fit:cover;background:#000}
.tile.grande video{object-fit:contain}
.tile.sinvideo video{visibility:hidden}
.tile .ini{position:absolute;inset:0;display:none;place-items:center;font-size:clamp(18px,6vw,56px);color:var(--dim)}
.tile.sinvideo .ini{display:grid}
.tile .nom{position:absolute;left:0;bottom:0;max-width:100%;padding:2px 8px;background:rgba(0,0,0,.55);color:#fff;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile.habla{box-shadow:inset 0 0 0 3px var(--ok)}.tile.fijado::after{content:"📌";position:absolute;right:6px;top:4px}
.tile.mano .nom::before{content:"✋ "}
#chat{width:300px;display:none;grid-template-rows:1fr auto;background:var(--panel);min-height:0}
#chat.abierto{display:grid}
#msgs{overflow:auto;padding:10px;display:grid;gap:6px;align-content:start}
.msg{font-size:14px}.msg b{color:var(--acc)}.msg.sis{color:var(--mano);font-style:italic}
#chatform{display:flex;gap:6px;padding:8px}#chatform input{flex:1;min-width:0}
#controles{grid-column:1/3;display:flex;gap:8px;justify-content:center;padding:10px;background:var(--panel);flex-wrap:wrap}
#controles .btn{min-width:44px}.btn.on{outline:2px solid var(--mano)}
.badge{background:var(--mal);border-radius:9px;padding:0 6px;font-size:12px;margin-left:4px}
@media (max-width:700px){#chat.abierto{position:fixed;inset:44px 0 60px 0;width:auto;z-index:5}}
.tile .sil{position:absolute;left:4px;top:4px;display:none;border:0;border-radius:6px;background:rgba(0,0,0,.6);color:#fff;padding:2px 6px;cursor:pointer;font-size:13px;z-index:2}
.tile:hover .sil,.tile.silenciado .sil{display:block}.tile.silenciado .sil{background:var(--mal)}
.tile.silenciado .nom::after{content:" 🔇"}
