/* ═══════════════════════════════════════════════════
   viewer3d.css — Panel 3D acompañante del wizard
   Reusa los tokens/alias ya definidos en styles.css
   (--teal, --dark, --grey-*, --red, --green, --r-*, --shadow-*).
   ═══════════════════════════════════════════════════ */

.v3d-fab{
  position:fixed; right:16px; bottom:156px; z-index:900;
  display:flex; align-items:center; gap:8px;
  background:var(--teal); color:#fff; border:none;
  padding:12px 18px; border-radius:var(--r-full);
  font-family:var(--pr-font-sans); font-size:14px; font-weight:700;
  box-shadow:var(--shadow-lg);
  cursor:pointer;
}
.v3d-fab span{white-space:nowrap;}
.v3d-fab.hidden{display:none;}

/* Panel acompañante, no modal bloqueante: en mobile queda anclado abajo dejando
   el formulario visible/tocable arriba, para poder seguir marcando Apto/No Apto
   mientras el 3D acompaña. En desktop se ancla como panel lateral flotante. */
.v3d-overlay{
  position:fixed; left:0; right:0; bottom:0; top:auto; z-index:1200;
  height:46vh; min-height:280px;
  background:var(--white);
  display:flex; flex-direction:column;
  border-radius:var(--r-lg) var(--r-lg) 0 0;
  box-shadow:var(--pr-shadow-glass);
}
.v3d-overlay.hidden{display:none;}

.v3d-header{
  display:flex; align-items:center; justify-content:space-between;
  padding:14px 16px; background:var(--pr-grad-header); color:#fff;
  flex:none;
}
.v3d-title{font-size:16px; font-weight:700; flex:1;}
.v3d-score{
  display:flex; align-items:baseline; gap:6px;
  background:rgba(255,255,255,.14); border-radius:var(--r-full);
  padding:5px 12px; margin-right:8px;
}
.v3d-score.hidden{display:none;}
.v3d-score-num{font-size:15px; font-weight:800; font-variant-numeric:tabular-nums; color:#fff;}
.v3d-score-sub{font-size:11px; color:rgba(255,255,255,.8); white-space:nowrap;}
.v3d-score.score-alto{background:rgba(230,244,234,.9);}
.v3d-score.score-alto .v3d-score-num{color:#2A5F22;}
.v3d-score.score-alto .v3d-score-sub{color:#2A5F22;}
.v3d-score.score-medio{background:rgba(251,241,220,.92);}
.v3d-score.score-medio .v3d-score-num{color:#8a5a10;}
.v3d-score.score-medio .v3d-score-sub{color:#8a5a10;}
.v3d-score.score-bajo{background:rgba(251,228,228,.92);}
.v3d-score.score-bajo .v3d-score-num{color:#C8102E;}
.v3d-score.score-bajo .v3d-score-sub{color:#C8102E;}
.v3d-close{
  width:32px; height:32px; border-radius:50%; border:none;
  background:rgba(255,255,255,.16); color:#fff; font-size:16px;
  cursor:pointer; display:flex; align-items:center; justify-content:center;
}

.v3d-stage{
  position:relative; flex:1; min-height:0;
  background:
    radial-gradient(ellipse at 50% 20%, rgba(54,124,43,.08), transparent 60%),
    var(--grey-bg);
  overflow:hidden;
}
.v3d-stage canvas{display:block; width:100%; height:100%;}

.v3d-hint{
  position:absolute; left:50%; bottom:14px; transform:translateX(-50%);
  font-size:12.5px; color:var(--grey); background:var(--white);
  border:1px solid var(--grey-light); padding:6px 14px; border-radius:var(--r-full);
  box-shadow:var(--shadow-sm); pointer-events:none; opacity:.92;
}

.v3d-loading{
  position:absolute; inset:0; z-index:2;
  background:var(--pr-grad-deep);
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px;
}
.v3d-spinner{
  width:34px; height:34px; border-radius:50%;
  border:3px solid rgba(255,255,255,.2); border-top-color:var(--yellow);
  animation:v3dSpin .7s linear infinite;
}
@keyframes v3dSpin{to{transform:rotate(360deg);}}
.v3d-loading-text{color:#fff; font-size:13.5px; font-weight:600;}

.v3d-pin{
  position:absolute; width:28px; height:28px; border-radius:50%;
  background:var(--white); border:2.5px solid var(--grey);
  color:var(--grey); display:flex; align-items:center; justify-content:center;
  font-size:13px; font-weight:700; transform:translate(-50%,-50%);
  box-shadow:var(--shadow-sm); z-index:1;
}
.v3d-pin.ok{background:var(--green); border-color:var(--green); color:#fff; box-shadow:0 0 0 6px rgba(54,124,43,.22),var(--shadow-md);}
.v3d-pin.bad{background:var(--red); border-color:var(--red); color:#fff; box-shadow:0 0 0 6px rgba(200,16,46,.22),var(--shadow-md);}
.v3d-pin-icon{pointer-events:none;}

/* Llamada (callout) con el detalle de los ítems No Apto de la zona,
   colgando del pin rojo — mismo patrón visual que un globo de historieta. */
.v3d-callout{
  position:absolute; bottom:100%; left:50%; transform:translate(-50%,-8px);
  min-width:150px; max-width:210px;
  background:var(--red); color:#fff;
  border-radius:var(--r-md); padding:9px 11px;
  font-size:12px; font-weight:600; line-height:1.45; text-align:left;
  box-shadow:var(--shadow-lg); pointer-events:none; z-index:5;
  white-space:normal;
}
.v3d-callout b{display:block; font-size:11px; text-transform:uppercase; letter-spacing:.04em; opacity:.85; margin-bottom:3px; font-weight:700;}
.v3d-callout div{font-weight:500;}
.v3d-callout::after{
  content:''; position:absolute; top:100%; left:50%; transform:translateX(-50%);
  border:6px solid transparent; border-top-color:var(--red);
}
.v3d-callout.hidden{display:none;}

.v3d-footer{
  flex:none; padding:12px 16px 16px; border-top:1px solid var(--grey-light);
  display:flex; flex-direction:column; gap:8px;
}
.v3d-swatch-row{display:flex; gap:9px; flex-wrap:wrap;}
.v3d-swatch{
  width:26px; height:26px; border-radius:50%; border:2px solid var(--grey-light);
  padding:0; cursor:pointer;
}
.v3d-swatch.active{border-color:var(--dark); box-shadow:0 0 0 2px var(--white), 0 0 0 3px var(--dark);}
.v3d-status{font-size:12.5px; color:var(--grey); font-weight:600;}
.v3d-status.ok{color:var(--green);}
.v3d-status.bad{color:var(--red);}

@media (min-width:768px){
  .v3d-overlay{ inset:auto; right:24px; bottom:24px; top:24px; left:auto;
    width:min(420px, 92vw); border-radius:var(--r-lg); box-shadow:var(--pr-shadow-glass); overflow:hidden; }
  .v3d-fab{right:24px;}
}
