:root{
  --bg:#07140c;
  --bg2:#0d2114;
  --panel:#f8fff5;
  --panel2:#eaf8df;
  --ink:#102018;
  --muted:#5b6b61;
  --green:#2f8f3a;
  --green2:#57b957;
  --green3:#0f5f2a;
  --line:#b8d9b1;
  --warn:#b86b1d;
  --bad:#b42318;
  --shadow:0 20px 55px rgba(0,0,0,.24);
}
*{box-sizing:border-box}
body{
  margin:0;
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
  color:var(--ink);
  background:
    radial-gradient(circle at top left, rgba(87,185,87,.18), transparent 34rem),
    linear-gradient(135deg,var(--bg),var(--bg2));
  min-height:100vh;
}
a{color:inherit}
.nv-top{
  position:sticky;top:0;z-index:20;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:14px clamp(14px,3vw,34px);
  color:#f3fff0;
  background:rgba(5,16,10,.9);
  backdrop-filter:blur(12px);
  border-bottom:1px solid rgba(190,240,180,.2);
}
.nv-brand{display:flex;align-items:center;gap:12px;font-weight:900;letter-spacing:.2px}
.nv-brand a{text-decoration:none;font-size:1.06rem}
.nv-brand span{font-size:.78rem;color:#bde8b6;border:1px solid rgba(189,232,182,.35);padding:3px 8px;border-radius:999px}
.nv-nav{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.nv-nav a{color:#eaffea;text-decoration:none;padding:8px 11px;border-radius:999px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.08)}
.nv-nav a:hover{background:rgba(87,185,87,.25)}
.nv-main{width:min(1180px,94vw);margin:0 auto;padding:28px 0 42px}
.nv-footer{color:#cfe8cb;text-align:center;padding:24px;font-size:.9rem;opacity:.82}
.nv-flash{width:min(1180px,94vw);margin:16px auto 0;padding:12px 14px;border-radius:14px;border:1px solid var(--line);background:#ecfdf3;color:#15451f;font-weight:700}
.nv-flash-bad{background:#fff1f1;border-color:#ffb4b4;color:#8f1a12}
.nv-flash-warn{background:#fff7e6;border-color:#ffd49a;color:#7b4300}
.nv-hero{display:grid;grid-template-columns:1.35fr .85fr;gap:26px;align-items:stretch;margin-top:18px}
.nv-hero-text,.nv-panel,.nv-card,.nv-hero-card{background:linear-gradient(180deg,var(--panel),var(--panel2));border:1px solid rgba(210,240,202,.95);border-radius:26px;box-shadow:var(--shadow);padding:clamp(20px,3vw,34px)}
.nv-hero-text{color:var(--ink);min-height:360px;display:flex;flex-direction:column;justify-content:center}
.nv-kicker{margin:0 0 8px;color:var(--green3);font-weight:900;text-transform:uppercase;font-size:.78rem;letter-spacing:.11em}
h1{font-size:clamp(2rem,5vw,4.3rem);line-height:1.02;margin:.1em 0 .25em;color:#103719}
h2{font-size:clamp(1.35rem,2.6vw,2rem);margin:.1em 0 .6em;color:#12371a}
h3{margin:.2em 0 .5em;color:#17401f}
p{line-height:1.55}.nv-muted{color:var(--muted)}
.nv-actions,.nv-actions-stack{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.nv-btn,.nv-link-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:999px;padding:11px 16px;font-weight:900;text-decoration:none;cursor:pointer;background:#eef7e8;color:#12371a;border:1px solid #c4dec0;box-shadow:0 8px 20px rgba(21,80,35,.12)}
.nv-btn:hover,.nv-link-btn:hover{transform:translateY(-1px)}
.nv-btn-primary{background:linear-gradient(135deg,var(--green),var(--green2));color:#fff;border-color:#217d31}
.nv-btn-warn{background:linear-gradient(135deg,#b86b1d,#dd9b35);color:#fff;border-color:#a35c16;width:100%;margin-top:18px}
.nv-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.nv-grid-3 article{background:#fff;border:1px solid #dbeed5;border-radius:18px;padding:18px}
.nv-auth{display:flex;justify-content:center;margin-top:28px}.nv-card{width:min(520px,100%)}
label{display:block;margin:12px 0;font-weight:800;color:#1a3d21}input,textarea{width:100%;margin-top:7px;border:1px solid #b8d9b1;border-radius:14px;padding:12px 13px;font:inherit;background:#fff;color:var(--ink)}textarea{min-height:120px;resize:vertical}.nv-hp{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
.nv-game-head{display:flex;justify-content:space-between;gap:18px;align-items:center;margin:18px 0 18px;padding:22px;border-radius:26px;background:linear-gradient(135deg,#f5fff0,#dff1d6);border:1px solid #cbe5c4;box-shadow:var(--shadow)}
.nv-game-head h1{font-size:clamp(1.8rem,4vw,3.2rem);margin:0}.nv-inline-form{display:flex;gap:8px;align-items:end}.nv-inline-form input{min-width:210px}
.nv-resources{display:grid;grid-template-columns:repeat(7,1fr);gap:10px;margin:18px 0}.nv-resources article{background:rgba(248,255,245,.96);border:1px solid #cbe5c4;border-radius:18px;padding:14px 10px;text-align:center;box-shadow:0 10px 26px rgba(0,0,0,.12)}.nv-resources span{display:block;font-size:1.35rem;font-weight:1000}.nv-resources small{display:block;color:var(--muted);font-weight:800}
.nv-game-layout{display:grid;grid-template-columns:1.25fr .75fr;gap:20px;margin-top:18px}
.nv-map{display:grid;grid-template-columns:repeat(7,minmax(40px,1fr));gap:8px;background:#12371a;border-radius:20px;padding:12px;border:1px solid #80b978}.nv-cell{aspect-ratio:1/1;margin:0}.nv-cell button{width:100%;height:100%;border:0;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font:inherit;font-weight:900;cursor:pointer;transition:.15s}.nv-cell span{font-size:clamp(1.2rem,3vw,2rem)}.nv-cell small{font-size:.72rem;color:#1f3f24}.nv-cell-empty{background:rgba(255,255,255,.06);border-radius:16px}.nv-cell-open button{background:linear-gradient(180deg,#f6fff2,#d8f0cc);border:1px solid #99cf8e;color:#12371a}.nv-cell-hidden button{background:linear-gradient(180deg,#22332a,#111d16);border:1px solid #3b6545;color:#d6f9d1}.nv-cell-hidden button:disabled{opacity:.35;cursor:not-allowed}.nv-cell-current button{outline:4px solid #f6c35c;box-shadow:0 0 0 6px rgba(246,195,92,.18)}
.nv-room-card{background:#fff;border:1px solid #dbeed5;border-radius:20px;padding:18px}.nv-room-icon{font-size:2.4rem}.nv-door-list{display:grid;gap:10px}.nv-door{width:100%;text-align:left;padding:12px;border-radius:16px;border:1px solid #cbe5c4;background:#fafff8;cursor:pointer}.nv-door strong,.nv-door span,.nv-door small{display:block}.nv-door small{margin-top:3px;color:var(--muted)}
.nv-feed,.nv-chat-list{display:grid;gap:10px}.nv-feed article,.nv-chat-list article{background:#fff;border:1px solid #dbeed5;border-radius:16px;padding:12px}.nv-feed p,.nv-chat-list p{margin:.3em 0}.nv-feed small,.nv-chat-list small{color:var(--muted)}
.nv-table-wrap{overflow-x:auto}.nv-table{width:100%;border-collapse:separate;border-spacing:0 8px}.nv-table th{text-align:left;color:#24532b;font-size:.9rem}.nv-table td,.nv-table th{padding:10px}.nv-table tbody tr{background:#fff;box-shadow:0 6px 18px rgba(0,0,0,.08)}.nv-table tbody td:first-child{border-radius:14px 0 0 14px}.nv-table tbody td:last-child{border-radius:0 14px 14px 0}.nv-chat-form{display:grid;gap:10px;margin-bottom:18px}
code{background:#e5f4dd;border:1px solid #c7e4bf;border-radius:8px;padding:2px 6px}
@media (max-width:900px){.nv-hero,.nv-game-layout{grid-template-columns:1fr}.nv-resources{grid-template-columns:repeat(2,1fr)}.nv-game-head{flex-direction:column;align-items:stretch}.nv-inline-form{flex-direction:column;align-items:stretch}.nv-grid-3{grid-template-columns:1fr}.nv-top{align-items:flex-start;flex-direction:column}.nv-nav{justify-content:flex-start}.nv-map{gap:5px;padding:8px}.nv-cell button{border-radius:12px}}


/* === P94 v1.2: avatar en movimiento de habitación a habitación === */
.nv-map{
  position:relative;
  overflow:visible;
  isolation:isolate;
}
.nv-cell{
  position:relative;
  z-index:1;
}
.nv-cell button{
  position:relative;
  overflow:hidden;
}
.nv-cell button::after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:radial-gradient(circle at 50% 15%, rgba(255,255,255,.28), transparent 42%);
  opacity:.65;
}
.nv-cell-open button{
  min-width:0;
}
.nv-cell-neighbor button{
  box-shadow:0 0 0 3px rgba(87,185,87,.22), inset 0 0 0 1px rgba(255,255,255,.55);
}
.nv-cell-locked-route button{
  opacity:.55;
  cursor:not-allowed;
}
.nv-cell-current button{
  outline:4px solid #f6c35c;
  box-shadow:0 0 0 6px rgba(246,195,92,.18), 0 0 24px rgba(246,195,92,.38);
}
.nv-room-code{
  display:block;
  font-size:clamp(.95rem,2.4vw,1.35rem)!important;
  letter-spacing:.02em;
  line-height:1;
  text-transform:uppercase;
  color:#12371a;
}
.nv-cell-hidden .nv-room-code{
  color:#d6f9d1;
  font-size:clamp(1.25rem,3vw,2rem)!important;
}
.nv-room-name-grid{
  position:relative;
  z-index:2;
  display:block;
  width:92%;
  max-width:92%;
  overflow:hidden;
  white-space:nowrap;
  text-overflow:ellipsis;
  font-size:clamp(.54rem,1.2vw,.72rem)!important;
  line-height:1.05;
  color:#24532b!important;
}
.nv-cell-hidden .nv-room-name-grid{color:#b8d9b1!important}
.nv-player-avatar{
  position:absolute;
  left:0;
  top:0;
  width:46px;
  height:58px;
  z-index:12;
  transform:translate(0,0);
  transition:transform .62s cubic-bezier(.2,.85,.25,1.08);
  pointer-events:none;
  filter:drop-shadow(0 10px 9px rgba(0,0,0,.34));
  will-change:transform;
}
.nv-player-avatar::before{
  content:"";
  position:absolute;
  inset:0;
  background:url('player.svg') center/contain no-repeat;
}
.nv-player-avatar::after{
  content:"";
  position:absolute;
  left:10px;
  right:10px;
  bottom:-3px;
  height:9px;
  border-radius:50%;
  background:rgba(0,0,0,.25);
  filter:blur(1px);
}
.nv-player-avatar.is-walking::before{
  animation:nv-avatar-walk .38s ease-in-out infinite;
}
.nv-player-avatar.is-walking::after{
  animation:nv-avatar-shadow .38s ease-in-out infinite;
}
.nv-player-avatar.walk-right{transform-origin:center bottom}
.nv-player-avatar.walk-left::before{transform:scaleX(-1)}
@keyframes nv-avatar-walk{
  0%,100%{translate:0 0; rotate:-1deg}
  50%{translate:0 -5px; rotate:2deg}
}
@keyframes nv-avatar-shadow{
  0%,100%{transform:scale(1);opacity:.32}
  50%{transform:scale(.84);opacity:.2}
}
.nv-map-help{
  display:flex;
  gap:8px;
  align-items:flex-start;
  margin-top:12px;
  padding:10px 12px;
  border-radius:14px;
  background:#fafff8;
  border:1px solid #dbeed5;
}
.nv-map-help strong{color:#17401f}
.nv-ajax-notice{
  position:fixed;
  right:16px;
  bottom:16px;
  z-index:999;
  max-width:min(420px,calc(100vw - 32px));
  padding:13px 15px;
  border-radius:16px;
  border:1px solid #b8d9b1;
  background:#ecfdf3;
  color:#15451f;
  box-shadow:0 18px 45px rgba(0,0,0,.22);
  font-weight:800;
}
.nv-ajax-notice.bad{
  background:#fff1f1;
  border-color:#ffb4b4;
  color:#8f1a12;
}
@media (max-width:900px){
  .nv-player-avatar{width:38px;height:49px}
  .nv-room-name-grid{display:none}
  .nv-room-code{font-size:.82rem!important}
}

/* === P96 v1.3: vista amplia, niebla y paneles laterales === */
body.nv-drawer-open{overflow:hidden}
.nv-main{
  width:100%;
  max-width:none;
  margin:0;
  padding:20px clamp(14px,2.2vw,28px) 30px;
}
.nv-game-head-compact{
  margin:10px 0 14px;
  padding:18px 20px;
  border-radius:24px;
}
.nv-inline-form-compact input{min-width:180px}
.nv-game-shell{
  position:relative;
  min-height:calc(100vh - 210px);
}
.nv-map-stage{
  position:relative;
  min-height:calc(100vh - 230px);
  padding:18px;
  border-radius:28px;
  overflow:hidden;
  background:
    radial-gradient(circle at top left, rgba(87,185,87,.12), transparent 28rem),
    linear-gradient(180deg, rgba(255,255,255,.96), rgba(231,245,226,.98));
}
.nv-map-stage-head{
  display:flex;
  justify-content:space-between;
  gap:16px;
  align-items:flex-end;
  margin-bottom:14px;
}
.nv-map-stage-status{
  display:flex;
  gap:10px;
  flex-wrap:wrap;
}
.nv-map-stage-status span{
  display:inline-flex;
  padding:8px 12px;
  border-radius:999px;
  background:#edf7e8;
  border:1px solid #cfe7c8;
  font-weight:800;
  color:#1a4121;
}
.nv-fab-stack{
  position:fixed;
  right:18px;
  bottom:18px;
  z-index:40;
  display:flex;
  flex-direction:column;
  gap:10px;
}
.nv-fab{
  border:0;
  border-radius:999px;
  padding:13px 16px;
  min-width:122px;
  font:inherit;
  font-weight:900;
  cursor:pointer;
  color:#f5fff2;
  background:linear-gradient(135deg,#155d27,#2f8f3a);
  box-shadow:0 18px 40px rgba(0,0,0,.22);
}
.nv-fab:hover{transform:translateY(-1px)}
.nv-drawer{
  position:fixed;
  top:84px;
  bottom:14px;
  width:min(420px,calc(100vw - 28px));
  z-index:45;
  border-radius:26px;
  background:linear-gradient(180deg,#fbfff8,#e8f4df);
  border:1px solid #cfe7c8;
  box-shadow:0 22px 58px rgba(0,0,0,.26);
  padding:18px;
  display:flex;
  flex-direction:column;
  gap:14px;
  overflow:auto;
  transition:transform .24s ease, opacity .24s ease;
  opacity:0;
  pointer-events:none;
}
.nv-drawer.is-open{opacity:1;pointer-events:auto}
.nv-drawer-right{right:14px;transform:translateX(calc(100% + 22px))}
.nv-drawer-left{left:14px;transform:translateX(calc(-100% - 22px))}
.nv-drawer-right.is-open,.nv-drawer-left.is-open{transform:translateX(0)}
.nv-drawer-head{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  padding-bottom:10px;
  border-bottom:1px solid #d9ead2;
}
.nv-drawer-head h2{margin:0}
.nv-drawer-close{
  border:0;
  background:#eef7e8;
  border:1px solid #cadece;
  width:42px;
  height:42px;
  border-radius:50%;
  font-size:1.5rem;
  line-height:1;
  cursor:pointer;
  color:#18401e;
}
.nv-drawer-section{display:grid;gap:12px}
.nv-resources-drawer{
  grid-template-columns:repeat(2,minmax(0,1fr));
  margin:0;
}
.nv-guide-list{margin:0;padding-left:18px;display:grid;gap:10px}
.nv-guide-list li{line-height:1.45}
.nv-legend-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.nv-legend-grid article{
  display:flex;
  gap:10px;
  align-items:center;
  background:#fff;
  border:1px solid #dbeed5;
  border-radius:16px;
  padding:12px;
}
.nv-legend-grid small{display:block;color:#5b6b61}
.nv-legend-swatch{
  width:18px;height:18px;border-radius:6px;display:inline-block;border:1px solid rgba(0,0,0,.08)
}
.nv-legend-swatch.current{background:linear-gradient(180deg,#fffbcc,#f6d45a)}
.nv-legend-swatch.neighbor{background:linear-gradient(180deg,#eef6ea,#b9d7aa)}
.nv-legend-swatch.open{background:linear-gradient(180deg,#4f6654,#2f4034)}
.nv-legend-swatch.hidden{background:linear-gradient(180deg,#111a13,#060907)}

.nv-map{
  display:grid;
  grid-template-columns:repeat(7,minmax(110px,1fr));
  gap:12px;
  padding:14px;
  background:
    radial-gradient(circle at center, rgba(105,149,111,.18), transparent 52%),
    linear-gradient(180deg,#102716,#0a160d);
  border:1px solid #2f5133;
  border-radius:24px;
  min-height:calc(100vh - 360px);
  height:calc(100vh - 360px);
  max-height:860px;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.04);
}
.nv-cell{min-height:110px;position:relative}
.nv-cell-empty{background:rgba(255,255,255,.03);border:1px dashed rgba(255,255,255,.05)}
.nv-cell button{
  height:100%;
  min-height:110px;
  border-radius:22px;
  padding:16px 10px 12px;
  justify-content:space-between;
  gap:8px;
}
.nv-room-level-badge{
  position:relative;
  z-index:2;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding:5px 9px;
  border-radius:999px;
  font-style:normal;
  font-size:.72rem;
  font-weight:900;
  background:rgba(255,255,255,.86);
  border:1px solid rgba(255,255,255,.4);
  color:#173c1d;
}
.nv-room-code{font-size:clamp(1.1rem,2vw,1.55rem)!important}
.nv-room-name-grid{
  width:100%;
  max-width:100%;
  text-align:center;
  white-space:normal;
  line-height:1.12;
  font-size:clamp(.7rem,1vw,.88rem)!important;
}
.nv-cell button::before{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  border-radius:inherit;
  transition:opacity .2s ease, background .2s ease;
}
.nv-cell-open button{
  background:linear-gradient(180deg,#425a47,#2a3a2d);
  border:1px solid #668a6d;
  color:#f3fff0;
}
.nv-cell-open button::before{
  background:linear-gradient(180deg,rgba(5,8,6,.40),rgba(9,12,10,.58));
  opacity:1;
}
.nv-cell-open .nv-room-code,
.nv-cell-open .nv-room-name-grid{color:#f0fff0!important}
.nv-cell-neighbor button::before{
  background:linear-gradient(180deg,rgba(18,29,20,.18),rgba(7,9,8,.30));
}
.nv-cell-hidden button{
  background:linear-gradient(180deg,#0f1711,#070b08);
  border:1px solid #243529;
  color:#dff6db;
}
.nv-cell-hidden button::before{
  background:radial-gradient(circle at center, rgba(255,255,255,.02), rgba(0,0,0,.58));
}
.nv-cell-current button{
  background:linear-gradient(180deg,#fffdd9,#f8dc7b);
  border:1px solid #f3c75b;
  color:#143519;
  outline:4px solid #ffe98d;
  box-shadow:0 0 0 8px rgba(255,235,136,.14), 0 0 34px rgba(255,230,122,.42), inset 0 0 28px rgba(255,255,255,.45);
}
.nv-cell-current button::before{opacity:0}
.nv-cell-current .nv-room-code,
.nv-cell-current .nv-room-name-grid{color:#143519!important}
.nv-cell-current .nv-room-level-badge{background:rgba(255,255,255,.82)}
.nv-cell-locked-route button{opacity:1;cursor:not-allowed}
.nv-cell-hidden button:disabled{opacity:1}

.nv-player-avatar{
  width:58px;
  height:72px;
  z-index:18;
  transition:transform .48s cubic-bezier(.2,.85,.25,1.08);
}
.nv-player-avatar.nv-no-anim{transition:none!important}
.nv-player-avatar.nv-avatar-preload{opacity:0}
.nv-player-avatar:not(.nv-avatar-preload){opacity:1}
.nv-player-avatar::after{bottom:1px}
.nv-map-help-drawer{margin:0}

@media (max-width:1080px){
  .nv-map{grid-template-columns:repeat(7,minmax(88px,1fr));gap:10px;min-height:calc(100vh - 330px);height:calc(100vh - 330px)}
  .nv-cell,.nv-cell button{min-height:96px}
  .nv-player-avatar{width:50px;height:63px}
}
@media (max-width:900px){
  .nv-main{padding:16px 12px 26px}
  .nv-game-head-compact{padding:16px}
  .nv-map-stage{min-height:calc(100vh - 210px);padding:14px}
  .nv-map-stage-head{flex-direction:column;align-items:flex-start}
  .nv-map{grid-template-columns:repeat(4,minmax(70px,1fr));height:auto;min-height:auto;max-height:none}
  .nv-cell,.nv-cell button{min-height:86px}
  .nv-room-name-grid{font-size:.68rem!important}
  .nv-drawer{top:74px;bottom:10px;width:calc(100vw - 20px)}
  .nv-fab-stack{right:12px;bottom:12px}
  .nv-fab{min-width:108px;padding:12px 14px}
  .nv-legend-grid{grid-template-columns:1fr}
}

/* === P97 v1.4: visor scrollable y zoom real === */
:root{--nv-map-zoom:1.18}
.nv-map-stage{padding:16px 16px 18px}
.nv-map-stage-head{margin-bottom:10px}
.nv-map-toolbar{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  margin-bottom:12px;
  flex-wrap:wrap;
}
.nv-map-toolbar-group{display:flex;gap:8px;align-items:center}
.nv-toolbar-btn{
  border:1px solid #cadece;
  background:#eef7e8;
  color:#173c1d;
  width:44px;
  height:44px;
  border-radius:14px;
  font:inherit;
  font-size:1.2rem;
  font-weight:1000;
  cursor:pointer;
  box-shadow:0 8px 20px rgba(21,80,35,.08);
}
.nv-map-toolbar-text{
  color:#547058;
  font-weight:800;
  font-size:.92rem;
}
.nv-map-viewport{
  position:relative;
  height:calc(100vh - 250px);
  min-height:520px;
  max-height:860px;
  overflow:auto;
  border-radius:26px;
  border:1px solid #2f5133;
  background:
    radial-gradient(circle at top left, rgba(255,255,255,.04), transparent 30%),
    linear-gradient(180deg,#0b1b10,#0c1610);
  cursor:grab;
  scrollbar-width:thin;
  scrollbar-color:#376241 #0e1811;
}
.nv-map-viewport.is-dragging{cursor:grabbing}
.nv-map-viewport::-webkit-scrollbar{height:12px;width:12px}
.nv-map-viewport::-webkit-scrollbar-thumb{background:#376241;border-radius:999px;border:2px solid #0e1811}
.nv-map-viewport::-webkit-scrollbar-track{background:#0e1811}
.nv-map-canvas{
  display:inline-block;
  min-width:100%;
  min-height:100%;
  padding:24px;
}
.nv-map{
  display:grid;
  grid-template-columns:repeat(7,calc(160px * var(--nv-map-zoom)));
  grid-auto-rows:calc(160px * var(--nv-map-zoom));
  gap:calc(14px * var(--nv-map-zoom));
  padding:calc(8px * var(--nv-map-zoom));
  width:max-content;
  min-width:max-content;
  min-height:max-content;
  height:auto;
  max-height:none;
  border-radius:24px;
}
.nv-cell{min-height:0;height:calc(160px * var(--nv-map-zoom))}
.nv-cell button{
  min-height:0;
  height:100%;
  padding:calc(14px * var(--nv-map-zoom)) calc(10px * var(--nv-map-zoom)) calc(12px * var(--nv-map-zoom));
  border-radius:calc(22px * var(--nv-map-zoom));
}
.nv-room-code{font-size:calc(1.22rem * var(--nv-map-zoom))!important}
.nv-room-name-grid{font-size:calc(.76rem * var(--nv-map-zoom))!important}
.nv-room-level-badge{font-size:calc(.72rem * var(--nv-map-zoom))}
.nv-player-avatar{
  width:calc(54px * var(--nv-map-zoom));
  height:calc(68px * var(--nv-map-zoom));
}
.nv-player-avatar::after{left:18%;right:18%;height:11px}
.nv-fab-stack{right:14px;bottom:14px}

@media (max-width:1100px){
  .nv-map-viewport{height:calc(100vh - 230px);min-height:460px}
}
@media (max-width:900px){
  :root{--nv-map-zoom:1}
  .nv-map-stage{padding:14px}
  .nv-map-viewport{height:calc(100vh - 210px);min-height:380px;border-radius:20px}
  .nv-map-canvas{padding:16px}
  .nv-map-toolbar{align-items:flex-start}
  .nv-map-toolbar-text{font-size:.85rem}
  .nv-toolbar-btn{width:40px;height:40px}
}

/* === P98 v1.5: vista de habitación única tipo Netropolis === */
.nv-roomplay-layout{
  display:grid;
  grid-template-columns:minmax(0,1.45fr) minmax(320px,.55fr);
  gap:18px;
  align-items:start;
}
.nv-roomplay-main,
.nv-minimap-card{padding:18px}
.nv-roomplay-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  gap:14px;
  margin-bottom:14px;
}
.nv-roomplay-head-mini{align-items:center}
.nv-roomplay-head h2,.nv-roomplay-head h3{margin:.15em 0 0}
.nv-roomplay-badges,
.nv-minimap-meta{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
}
.nv-roomplay-badges span,
.nv-minimap-meta{
  padding:8px 12px;
  border-radius:999px;
  border:1px solid #d4e8cf;
  background:#f4fbef;
  color:#1b4522;
  font-weight:900;
}
.nv-room-scene-wrap{
  background:linear-gradient(180deg,#edf8e8,#dcedd5);
  border:1px solid #d4e8cf;
  border-radius:28px;
  padding:16px;
}
.nv-room-scene{
  position:relative;
  aspect-ratio:16/10;
  min-height:460px;
  border-radius:24px;
  overflow:hidden;
  background:radial-gradient(circle at 50% 22%, rgba(255,255,255,.20), transparent 22%), linear-gradient(180deg,#eef2ec,#d3dbd0);
}
.nv-room-3d{position:absolute;inset:0}
.nv-room-wall,
.nv-room-floor{position:absolute;pointer-events:none}
.nv-room-wall-back{
  left:22%; right:22%; top:10%; height:36%;
  background:linear-gradient(180deg,#f6f8f4,#e4e9e0);
  border:4px solid #0e0f10;
  border-bottom-width:3px;
}
.nv-room-wall-left{
  left:9%; top:10.1%; width:30%; height:56%;
  clip-path:polygon(0 35%, 78% 0, 78% 64%, 0 100%);
  background:linear-gradient(135deg,#edf1ea,#d7ddd4);
  border-left:4px solid #0e0f10;
  border-top:4px solid #0e0f10;
  border-bottom:4px solid #0e0f10;
  box-shadow:inset -6px 0 12px rgba(0,0,0,.04);
}
.nv-room-wall-right{
  right:9%; top:10.1%; width:30%; height:56%;
  clip-path:polygon(22% 0, 100% 35%, 100% 100%, 22% 64%);
  background:linear-gradient(225deg,#edf1ea,#d7ddd4);
  border-right:4px solid #0e0f10;
  border-top:4px solid #0e0f10;
  border-bottom:4px solid #0e0f10;
  box-shadow:inset 6px 0 12px rgba(0,0,0,.04);
}
.nv-room-floor{
  left:12%; right:12%; bottom:7%; height:52%;
  clip-path:polygon(15% 0, 85% 0, 100% 36%, 50% 100%, 0 36%);
  background:linear-gradient(180deg,#f2f4ef,#d7ddd4);
  border:4px solid #0e0f10;
  box-shadow:inset 0 -20px 28px rgba(0,0,0,.05);
}
.nv-room-door{position:absolute;z-index:4;margin:0}
.nv-room-door button{
  position:relative;
  border:0;
  background:transparent;
  cursor:pointer;
  padding:0;
  width:100%;
  height:100%;
}
.nv-room-door-leaf{
  position:absolute;
  inset:auto;
  display:block;
  background:linear-gradient(180deg,#c98d67,#aa6d4f);
  border:3px solid #8c573f;
  border-radius:4px;
  box-shadow:0 6px 14px rgba(0,0,0,.12);
}
.nv-room-door.is-closed .nv-room-door-leaf{
  background:linear-gradient(180deg,#b57b5f,#8f583f);
}
.nv-room-door-caption{
  position:absolute;
  left:50%;
  transform:translateX(-50%);
  bottom:-52px;
  display:grid;
  gap:2px;
  width:max-content;
  min-width:96px;
  max-width:150px;
  text-align:center;
  padding:7px 10px;
  border-radius:14px;
  background:rgba(255,255,255,.9);
  border:1px solid rgba(18,59,29,.12);
  color:#16371c;
}
.nv-room-door-caption strong{font-size:.85rem}
.nv-room-door-caption small{font-size:.72rem;color:#53675a}
.nv-room-door-north{left:50%;top:18%;width:88px;height:128px;transform:translateX(-50%)}
.nv-room-door-north .nv-room-door-leaf{left:10px;right:10px;top:0;bottom:0}
.nv-room-door-east{right:23%;top:38%;width:88px;height:148px;transform:skewY(-18deg)}
.nv-room-door-east button{transform:skewY(18deg)}
.nv-room-door-east .nv-room-door-leaf{left:12px;right:12px;top:0;bottom:0}
.nv-room-door-east .nv-room-door-caption{bottom:-58px}
.nv-room-door-west{left:23%;top:38%;width:88px;height:148px;transform:skewY(18deg)}
.nv-room-door-west button{transform:skewY(-18deg)}
.nv-room-door-west .nv-room-door-leaf{left:12px;right:12px;top:0;bottom:0}
.nv-room-door-west .nv-room-door-caption{bottom:-58px}
.nv-room-door-south{left:50%;bottom:16%;width:126px;height:96px;transform:translateX(-50%) perspective(600px) rotateX(65deg)}
.nv-room-door-south button{transform:perspective(600px) rotateX(-65deg)}
.nv-room-door-south .nv-room-door-leaf{left:8px;right:8px;top:0;bottom:0}
.nv-room-door-south .nv-room-door-caption{bottom:-66px}
.nv-room-door.is-open .nv-room-door-leaf::after,
.nv-room-door.is-closed .nv-room-door-leaf::after{
  content:"";
  position:absolute;
  width:8px;
  height:8px;
  border-radius:50%;
  right:10px;
  top:50%;
  transform:translateY(-50%);
  background:#f7d978;
  box-shadow:0 0 0 1px rgba(0,0,0,.18);
}
.nv-room-door.is-open .nv-room-door-leaf{outline:3px solid rgba(92,189,103,.26)}
.nv-room-door.is-open .nv-room-door-caption{background:#effaed}
.nv-room-door.is-closed .nv-room-door-caption{background:#fff5ef}
.nv-player-avatar{
  position:absolute;
  left:0; top:0;
  width:58px; height:72px;
  z-index:5;
  transform:translate(calc(var(--nv-avatar-x) - 50%), calc(var(--nv-avatar-y) - 50%));
  transition:transform .48s cubic-bezier(.2,.85,.25,1.08);
}
.nv-player-avatar.nv-no-anim{transition:none!important}
.nv-player-avatar.nv-avatar-preload{opacity:0}
.nv-player-avatar:not(.nv-avatar-preload){opacity:1}
.nv-player-avatar::before{background:url('player.svg') center/contain no-repeat}
.nv-player-avatar::after{bottom:2px}
.nv-minimap-grid{
  display:grid;
  gap:6px;
  margin-top:12px;
  background:#0d1510;
  padding:10px;
  border-radius:18px;
}
.nv-mini{
  aspect-ratio:1/1;
  border-radius:6px;
  border:1px solid rgba(255,255,255,.07);
}
.nv-mini-empty{background:rgba(255,255,255,.03);border-style:dashed}
.nv-mini-hidden{background:linear-gradient(180deg,#09100b,#030504)}
.nv-mini-open{background:linear-gradient(180deg,#5b725f,#2f4133)}
.nv-mini-current{background:linear-gradient(180deg,#fff4c6,#f6d462);box-shadow:0 0 0 3px rgba(246,212,98,.28)}
.nv-minimap-legend{
  display:flex;
  gap:12px;
  flex-wrap:wrap;
  margin-top:14px;
  color:#26442a;
  font-weight:800;
}
.nv-minimap-legend div{display:flex;align-items:center;gap:8px}
.nv-minimap-notes{
  margin-top:14px;
  padding:14px;
  border-radius:16px;
  background:#f7fcf4;
  border:1px solid #dfeeda;
}
.nv-door-static{padding:14px;border-radius:16px;border:1px solid #dbeed5;background:#fff}
.nv-door-static strong,.nv-door-static span,.nv-door-static small{display:block}
.nv-door-static small{margin-top:3px;color:#64736b}
.nv-door-static-muted{opacity:.75}

@media (max-width:1080px){
  .nv-roomplay-layout{grid-template-columns:1fr}
  .nv-room-scene{min-height:420px}
}
@media (max-width:760px){
  .nv-roomplay-main,.nv-minimap-card{padding:14px}
  .nv-roomplay-head{flex-direction:column;align-items:flex-start}
  .nv-room-scene{min-height:360px}
  .nv-room-door-caption{font-size:.72rem;min-width:82px;padding:6px 8px}
  .nv-room-door-north{width:72px;height:104px}
  .nv-room-door-east,.nv-room-door-west{width:72px;height:124px}
  .nv-room-door-south{width:108px;height:82px}
  .nv-player-avatar{width:48px;height:60px}
}

/* === P100 v1.6: refinado de la vista de habitación === */
.nv-roomplay-layout{
  display:grid;
  grid-template-columns:minmax(0,1.55fr) minmax(320px,.55fr);
  gap:18px;
  align-items:start;
}
.nv-roomplay-main,.nv-minimap-card{padding:18px}
.nv-roomplay-head{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;margin-bottom:14px}
.nv-roomplay-head-mini{align-items:center}
.nv-roomplay-badges,.nv-minimap-meta{display:flex;gap:8px;flex-wrap:wrap}
.nv-roomplay-badges span,.nv-minimap-meta{padding:8px 12px;border-radius:999px;border:1px solid #d4e8cf;background:#f4fbef;color:#1b4522;font-weight:900}
.nv-room-scene-wrap{background:linear-gradient(180deg,#edf8e8,#dcedd5);border:1px solid #d4e8cf;border-radius:28px;padding:16px}
.nv-room-scene{
  position:relative;
  aspect-ratio:16/10;
  min-height:520px;
  border-radius:24px;
  overflow:hidden;
  background:radial-gradient(circle at 50% 14%, rgba(255,255,255,.55), transparent 22%), linear-gradient(180deg,#eef2ec,#d0d8cf);
}
.nv-room-scene.theme-botanico{background:radial-gradient(circle at 50% 14%, rgba(255,255,255,.55), transparent 22%), linear-gradient(180deg,#eff5ed,#d4ddd1)}
.nv-room-scene.theme-laboratorio{background:radial-gradient(circle at 50% 14%, rgba(255,255,255,.55), transparent 22%), linear-gradient(180deg,#edf1f3,#d4d9dc)}
.nv-room-scene.theme-energia{background:radial-gradient(circle at 50% 14%, rgba(255,255,255,.48), transparent 22%), linear-gradient(180deg,#f1f2ea,#d7d9c9)}
.nv-room-scene.theme-agua{background:radial-gradient(circle at 50% 14%, rgba(255,255,255,.52), transparent 22%), linear-gradient(180deg,#eef4f5,#d1dbe0)}
.nv-room-3d{position:absolute;inset:0}
.nv-scene-hud{position:absolute;left:18px;top:18px;z-index:7;display:flex;gap:10px;flex-wrap:wrap}
.nv-scene-hud span{padding:8px 12px;border-radius:999px;background:rgba(255,255,255,.78);border:1px solid rgba(0,0,0,.08);color:#183a1f;font-weight:900;backdrop-filter:blur(4px)}
.nv-room-wall,.nv-room-floor,.nv-room-glow{position:absolute;pointer-events:none}
.nv-room-wall-back{left:24%;right:24%;top:12%;height:34%;background:linear-gradient(180deg,#fbfcfb,#edf0ec);border:4px solid #101010;border-bottom-width:3px;box-shadow:inset 0 -18px 24px rgba(0,0,0,.03)}
.nv-room-wall-left{left:10%;top:12%;width:28%;height:54%;clip-path:polygon(0 36%, 80% 0, 80% 64%, 0 100%);background:linear-gradient(135deg,#eef1ec,#d9dfd7);border-left:4px solid #101010;border-top:4px solid #101010;border-bottom:4px solid #101010;box-shadow:inset -12px 0 20px rgba(0,0,0,.04)}
.nv-room-wall-right{right:10%;top:12%;width:28%;height:54%;clip-path:polygon(20% 0, 100% 36%, 100% 100%, 20% 64%);background:linear-gradient(225deg,#eef1ec,#d9dfd7);border-right:4px solid #101010;border-top:4px solid #101010;border-bottom:4px solid #101010;box-shadow:inset 12px 0 20px rgba(0,0,0,.04)}
.nv-room-floor{left:12%;right:12%;bottom:8%;height:48%;clip-path:polygon(16% 0, 84% 0, 100% 38%, 50% 100%, 0 38%);background:linear-gradient(180deg,#f5f6f3,#dfe4dd);border:4px solid #101010;box-shadow:inset 0 -30px 40px rgba(0,0,0,.05)}
.nv-room-glow{left:35%;right:35%;top:17%;height:44%;background:radial-gradient(circle at center, rgba(231,255,220,.5), rgba(255,255,255,0));filter:blur(4px)}

.nv-room-prop{position:absolute;z-index:3;border-radius:12px;box-shadow:0 10px 18px rgba(0,0,0,.12)}
.nv-prop-planter-left,.nv-prop-planter-right{width:86px;height:92px;background:linear-gradient(180deg,#6c4b35 0 30%, #9c6a47 30% 55%, #4b8d43 55% 100%);bottom:24%;}
.nv-prop-planter-left{left:24%}
.nv-prop-planter-right{right:24%}
.nv-prop-workbench{left:43%;bottom:22%;width:170px;height:76px;background:linear-gradient(180deg,#876447 0 22%, #b38964 22% 62%, #73553d 62% 100%);border-radius:14px}
.nv-prop-bench{left:42%;bottom:22%;width:180px;height:70px;background:linear-gradient(180deg,#9b7754 0 26%, #c39a74 26% 64%, #7a5c41 64% 100%)}
.nv-prop-crate{right:28%;bottom:23%;width:84px;height:72px;background:linear-gradient(180deg,#a67b55,#7c5c40)}
.nv-prop-lamp{left:26%;top:30%;width:20px;height:120px;background:linear-gradient(180deg,#6a7378,#454b4e);border-radius:8px}
.nv-prop-lamp::after{content:"";position:absolute;top:-12px;left:-11px;width:42px;height:24px;border-radius:50%;background:radial-gradient(circle, rgba(255,239,180,.95), rgba(255,239,180,.35), rgba(255,239,180,0))}
.nv-prop-generator{left:24%;bottom:23%;width:116px;height:94px;background:linear-gradient(180deg,#61696e,#34393c)}
.nv-prop-battery{right:24%;bottom:23%;width:78px;height:106px;background:linear-gradient(180deg,#7a846b,#505844)}
.nv-prop-console{left:44%;bottom:25%;width:120px;height:76px;background:linear-gradient(180deg,#657179 0 30%, #394046 30% 100%)}
.nv-prop-console::after{content:"";position:absolute;left:14px;right:14px;top:14px;height:20px;background:linear-gradient(90deg,#55c26b,#7fd7e9);border-radius:8px}
.nv-prop-tank-left,.nv-prop-tank-right{width:84px;height:108px;background:linear-gradient(180deg,#6f8791,#4d5e67);bottom:23%;border-radius:18px}
.nv-prop-tank-left{left:23%}
.nv-prop-tank-right{right:23%}
.nv-prop-pump{left:45%;bottom:24%;width:94px;height:82px;background:linear-gradient(180deg,#7a8a6f,#546249)}
.nv-prop-locker{left:23%;bottom:22%;width:86px;height:126px;background:linear-gradient(180deg,#7c878a,#535d61)}
.nv-prop-barrier{right:22%;bottom:21%;width:128px;height:58px;background:repeating-linear-gradient(90deg,#d7a332 0 18px,#3b3b3b 18px 36px)}
.nv-prop-shelf{left:23%;bottom:22%;width:118px;height:122px;background:linear-gradient(180deg,#7c654e,#5c4837)}
.nv-prop-shelf::after{content:"";position:absolute;left:10px;right:10px;top:28px;bottom:14px;background:repeating-linear-gradient(180deg,transparent 0 20px, rgba(0,0,0,.18) 20px 24px)}

.nv-room-door{position:absolute;z-index:5;margin:0}
.nv-room-door button{position:relative;border:0;background:transparent;cursor:pointer;padding:0;width:100%;height:100%}
.nv-room-door-frame,.nv-room-door-leaf{position:absolute;display:block;border-radius:4px}
.nv-room-door-frame{inset:0;background:#8a563d;border:3px solid #66402d;box-shadow:0 10px 14px rgba(0,0,0,.14)}
.nv-room-door-leaf{left:8px;right:8px;top:8px;bottom:8px;background:linear-gradient(180deg,#ce976d,#b47654);border:2px solid #8c5b42;box-shadow:inset 0 0 0 2px rgba(255,255,255,.14)}
.nv-room-door.is-closed .nv-room-door-leaf{background:linear-gradient(180deg,#ba835e,#975f43)}
.nv-room-door.is-open .nv-room-door-leaf{background:linear-gradient(180deg,#d6a57d,#bc825f)}
.nv-room-door-leaf::before{content:"";position:absolute;inset:10px;border:2px solid rgba(98,58,39,.42)}
.nv-room-door-leaf::after{content:"";position:absolute;width:8px;height:8px;border-radius:50%;right:8px;top:50%;transform:translateY(-50%);background:#f7d978;box-shadow:0 0 0 1px rgba(0,0,0,.18)}
.nv-room-door-caption{position:absolute;left:50%;transform:translateX(-50%);bottom:-54px;display:grid;gap:2px;width:max-content;min-width:110px;max-width:160px;text-align:center;padding:7px 10px;border-radius:14px;background:rgba(255,255,255,.93);border:1px solid rgba(18,59,29,.12);color:#16371c}
.nv-room-door-caption strong{font-size:.85rem}.nv-room-door-caption small{font-size:.72rem;color:#53675a}
.nv-room-door-north{left:50%;top:19%;width:92px;height:132px;transform:translateX(-50%)}
.nv-room-door-east{right:20%;top:42%;width:84px;height:142px;transform:skewY(-18deg)}
.nv-room-door-east button{transform:skewY(18deg)}
.nv-room-door-west{left:20%;top:42%;width:84px;height:142px;transform:skewY(18deg)}
.nv-room-door-west button{transform:skewY(-18deg)}
.nv-room-door-south{left:50%;bottom:18%;width:126px;height:94px;transform:translateX(-50%) perspective(600px) rotateX(64deg)}
.nv-room-door-south button{transform:perspective(600px) rotateX(-64deg)}
.nv-room-door-south .nv-room-door-caption{bottom:-70px}

.nv-player-avatar{
  position:absolute;
  left:var(--nv-avatar-x);
  top:var(--nv-avatar-y);
  width:62px;
  height:76px;
  z-index:6;
  transform:translate(-50%,-50%);
  transition:left .42s cubic-bezier(.2,.85,.25,1.08), top .42s cubic-bezier(.2,.85,.25,1.08), transform .18s ease;
  filter:drop-shadow(0 12px 10px rgba(0,0,0,.28));
}
.nv-player-avatar.nv-no-anim{transition:none!important}
.nv-player-avatar.nv-avatar-preload{opacity:0}.nv-player-avatar:not(.nv-avatar-preload){opacity:1}
.nv-player-avatar::before{content:"";position:absolute;inset:0;background:url('player.svg') center/contain no-repeat}
.nv-player-avatar::after{content:"";position:absolute;left:12px;right:12px;bottom:-2px;height:10px;border-radius:50%;background:rgba(0,0,0,.22);filter:blur(1px)}
.nv-player-avatar.is-walking::before{animation:nv-avatar-walk .35s ease-in-out infinite}
.nv-player-avatar.is-walking::after{animation:nv-avatar-shadow .35s ease-in-out infinite}

.nv-minimap-grid{display:grid;gap:6px;margin-top:12px;background:#0d1510;padding:10px;border-radius:18px}
.nv-mini{aspect-ratio:1/1;border-radius:6px;border:1px solid rgba(255,255,255,.07)}
.nv-mini-empty{background:rgba(255,255,255,.03);border-style:dashed}
.nv-mini-hidden{background:linear-gradient(180deg,#09100b,#030504)}
.nv-mini-open{background:linear-gradient(180deg,#6a806d,#37493a)}
.nv-mini-current{background:linear-gradient(180deg,#fff4c6,#f6d462);box-shadow:0 0 0 3px rgba(246,212,98,.28)}
.nv-minimap-legend{display:flex;gap:12px;flex-wrap:wrap;margin-top:14px;color:#26442a;font-weight:800}
.nv-minimap-legend div{display:flex;align-items:center;gap:8px}
.nv-minimap-notes{margin-top:14px;padding:14px;border-radius:16px;background:#f7fcf4;border:1px solid #dfeeda}

@media (max-width:1100px){
  .nv-roomplay-layout{grid-template-columns:1fr}
  .nv-room-scene{min-height:460px}
}
@media (max-width:760px){
  .nv-roomplay-main,.nv-minimap-card{padding:14px}
  .nv-roomplay-head{flex-direction:column;align-items:flex-start}
  .nv-room-scene{min-height:360px}
  .nv-room-door-caption{font-size:.72rem;min-width:84px;padding:6px 8px}
  .nv-room-door-north{width:74px;height:108px}
  .nv-room-door-east,.nv-room-door-west{width:70px;height:118px}
  .nv-room-door-south{width:104px;height:82px}
  .nv-player-avatar{width:50px;height:62px}
  .nv-scene-hud{left:10px;top:10px}
  .nv-scene-hud span{padding:6px 10px;font-size:.84rem}
}
