/* Estilos heredados del panel original */
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
 background:#faf8f4;color:#26241f;line-height:1.5}
.wrap{max-width:1440px;margin:0 auto;padding:24px 22px 60px}
header{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;flex-wrap:wrap}
h1{margin:0 0 4px;font-size:25px;letter-spacing:-.4px}
header p{margin:0;color:#6b665c;font-size:13.5px}
.meta{margin-top:8px;font-size:12.5px;color:#8a8578}
.bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
button{font-family:inherit;font-size:13px;border-radius:7px;padding:7px 14px;cursor:pointer;
 border:1px solid #ddd6c8;background:#fff;color:#3a352d}
button:hover{background:#f4f1ea}
button.primary{background:#26241f;color:#fff;border-color:#26241f}
button.primary:hover{background:#3d3931}
button.on{background:#c2410c;color:#fff;border-color:#c2410c}
.filters{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:13px}
.fb{border-radius:20px;padding:4px 14px;font-size:12.5px;background:#fff;color:#4a463f}
.fb:hover{background:#f4f1ea}
.fb.on{background:#26241f;color:#fff;border-color:#26241f}
button.save{background:#1f6f47;color:#fff;border-color:#1f6f47}
button.save:hover{background:#28885a}
button.save.dirty{background:#c2410c;border-color:#c2410c;animation:pulso 1.6s ease-in-out infinite}
@keyframes pulso{0%,100%{opacity:1}50%{opacity:.72}}
#aviso{background:#fff4f4;border:1px solid #f3c9c9;border-left:4px solid #c81e1e;border-radius:0 8px 8px 0;
 padding:11px 14px;margin-top:14px;font-size:12.5px;color:#7a2020;display:none}
#aviso.on{display:block}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:13px;margin:22px 0}
.kpi{background:#fff;border:1px solid #e5e0d6;border-radius:10px;padding:15px 17px}
.kv{font-size:30px;font-weight:700;line-height:1}
.kl{font-size:12.5px;font-weight:600;margin-top:5px}
.ks{font-size:11.5px;color:#8a8578;margin-top:2px}
.grid{display:grid;grid-template-columns:1fr 372px;gap:20px;align-items:start}
@media(max-width:1120px){.grid{grid-template-columns:1fr}}
.card{background:#fff;border:1px solid #e5e0d6;border-radius:10px;padding:18px}
h2{font-size:14px;text-transform:uppercase;letter-spacing:.8px;color:#6b665c;margin:0 0 12px;
 display:flex;justify-content:space-between;align-items:center;gap:10px}
svg{width:100%;height:auto;display:block}
.cell{cursor:pointer} .cell:hover .bx{stroke-width:5;filter:brightness(.96)}
.cell.sel .bx{stroke:#111 !important;stroke-width:5}
.flag{fill:#c2410c;opacity:0} .cell.rev .flag{opacity:1}
.num{font:700 22px sans-serif;fill:#26241f} .sub{font:600 11px sans-serif;fill:#6b665c}
.sub2{font:11px sans-serif;fill:#8a8578}
.lbl-mut{font:600 13px sans-serif;fill:#6b665c;letter-spacing:1px}
.calle{font:600 14px sans-serif;fill:#6b665c;letter-spacing:2px}
.calle-mut{font:12px sans-serif;fill:#a49e91;letter-spacing:2px}
.acc{font:700 12px sans-serif;fill:#3a352d;letter-spacing:1.5px}
.flecha{font:15px sans-serif;fill:#6b665c}
.hueco{stroke:#eae4d8;stroke-width:5;stroke-linecap:butt}
.hueco-ext{stroke:#fbf8f2;stroke-width:9;stroke-linecap:butt}
.hoja{stroke:#4a4640;stroke-width:2.2;stroke-linecap:round}
.arco{fill:none;stroke:#8a8578;stroke-width:1.4}
.coche{fill:none;stroke:#c9c2b2;stroke-width:2}
.coche rect:first-child{fill:#e2dcce}
.legend{display:flex;flex-wrap:wrap;gap:7px 16px;margin-bottom:12px;font-size:12.5px}
.lg{display:flex;align-items:center;gap:6px;color:#4a463f;cursor:pointer;
 padding:2px 7px;border-radius:14px;border:1px solid transparent}
.lg:hover{background:#f7f4ee} .lg.off{opacity:.35} .lg.act{border-color:#26241f;background:#f4f1ea}
.lg i{width:13px;height:13px;border-radius:3px;border:2px solid;display:inline-block}
.ph{color:#a49e91;font-size:13px;text-align:center;padding:46px 10px}
.fh{display:flex;align-items:baseline;gap:10px;border-bottom:1px solid #eee7db;padding-bottom:9px;margin-bottom:11px}
.fh b{font-size:31px;line-height:1} .fh span{font-size:13px;color:#8a8578}
.pill{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11.5px;font-weight:600;
 color:var(--c);background:var(--bg);border:1px solid var(--c);white-space:nowrap}
.kvrow{display:flex;justify-content:space-between;gap:10px;padding:5px 0;font-size:13px;border-bottom:1px dotted #eee7db}
.kvrow span:first-child{color:#8a8578;flex-shrink:0}
.kvrow span:last-child{font-weight:600;text-align:right;word-break:break-word}
.nota{margin-top:11px;font-size:12.5px;color:#5a564e;background:#f7f4ee;border-left:3px solid #d8d1c2;
 padding:9px 11px;border-radius:0 5px 5px 0;white-space:pre-wrap}
label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:#8a8578;
 margin:9px 0 3px;font-weight:600}
input,select,textarea{width:100%;font-family:inherit;font-size:13px;padding:6px 9px;
 border:1px solid #ddd6c8;border-radius:6px;background:#fffdf9;color:#26241f}
input:focus,select:focus,textarea:focus{outline:2px solid #c2a878;outline-offset:-1px;background:#fff}
textarea{min-height:86px;resize:vertical;line-height:1.45}
.two{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.actions{display:flex;gap:8px;margin-top:14px}
.actions button{flex:1}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:#8a8578;
 border-bottom:2px solid #e5e0d6;padding:8px 7px;white-space:nowrap;position:sticky;top:0;background:#fff;z-index:2}
td{padding:7px;border-bottom:1px solid #f1ede4;vertical-align:top}
tr.row{cursor:pointer} tr.row:hover{background:#faf8f2} tr.hl{background:#fff6e0 !important}
.tc{text-align:center} .tr{text-align:right;font-variant-numeric:tabular-nums}
.b{font-weight:700} .mut{color:#a49e91} .warn{color:#c2410c;font-weight:600}
.small{font-size:11.5px;color:#6b665c}
.scroll{overflow:auto;max-height:640px}
.alert{background:#fff8e6;border:1px solid #f0dfae;border-left:4px solid #d97706;border-radius:0 8px 8px 0;
 padding:14px 16px;margin-top:20px;font-size:13px}
.alert h3{margin:0 0 8px;font-size:13px;color:#92400e}
.alert ul{margin:0;padding-left:18px} .alert li{margin-bottom:6px}
footer{margin-top:32px;font-size:11.5px;color:#a49e91;border-top:1px solid #e5e0d6;padding-top:13px}
#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(80px);
 background:#26241f;color:#fff;padding:10px 20px;border-radius:8px;font-size:13px;z-index:99;
 transition:transform .25s;box-shadow:0 6px 20px rgba(0,0,0,.2)}
#toast.show{transform:translateX(-50%) translateY(0)}
.saved{font-size:11.5px;color:#8a8578;font-weight:400;text-transform:none;letter-spacing:0}
.editing .card{box-shadow:0 0 0 2px #f3d9b8}
.badge{background:#c2410c;color:#fff;font-size:10px;padding:1px 6px;border-radius:10px;
 font-weight:700;letter-spacing:.3px}

/* ============ MÓVIL Y TABLETA ESTRECHA ============ */

/* La ficha deja de ser una columna lateral y pasa a abrirse como panel deslizante.
   Así no depende de que el navegador sepa desplazar la página, que es lo que fallaba. */
@media (max-width: 1120px) {
  #ficha{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:70;margin:0;
   max-height:88vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
   border-radius:16px 16px 0 0;border:0;box-shadow:0 -10px 34px rgba(20,18,15,.30);
   padding:16px 15px 26px;
   transform:translateY(102%);transition:transform .22s ease-out;will-change:transform}
  #ficha.abierta{transform:none}
  #fondo{position:fixed;inset:0;background:rgba(20,18,15,.45);z-index:69;
   opacity:0;pointer-events:none;transition:opacity .22s}
  #fondo.abierta{opacity:1;pointer-events:auto}
  body.bloqueado{overflow:hidden}
  #cerrar{position:absolute;top:11px;right:12px;width:36px;height:36px;padding:0;
   border:0;border-radius:50%;background:#efeae0;color:#4a463f;font-size:17px;line-height:1;z-index:2}
  #ficha .ph{display:none}
}

@media (max-width: 760px) {
  .wrap{padding:14px 11px 36px}
  header{gap:12px}
  h1{font-size:19px;line-height:1.25}
  header p{font-size:12px}
  .meta{font-size:11px;margin-top:6px}
  .bar{width:100%;gap:6px}
  .bar button{flex:1 1 46%;min-height:44px;padding:9px 8px;font-size:12.5px}
  .kpis{grid-template-columns:1fr 1fr;gap:8px;margin:14px 0}
  .kpi{padding:10px 11px}
  .kv{font-size:21px !important}
  .kl{font-size:11px;margin-top:3px}
  .ks{font-size:10px}
  .card{padding:12px;border-radius:9px}
  .grid{gap:13px}
  h2{font-size:12.5px;flex-wrap:wrap}

  /* Plano: al encogerse, los rótulos pequeños se vuelven ilegibles. Se agranda el
     número y se ocultan las líneas de detalle; el resto se ve tocando el trastero. */
  .num{font-size:46px}
  .sub,.sub2{display:none}
  .lbl-mut{font-size:24px;letter-spacing:0}
  .calle{font-size:24px;letter-spacing:1px}
  .calle-mut,.acc{font-size:21px;letter-spacing:0}
  .flag{r:10}
  .cell:hover .bx{stroke-width:3}
  .legend{gap:5px 10px;font-size:11.5px}
  .lg{padding:3px 6px}

  /* Tabla maestra: en pantalla estrecha cada fila pasa a ser una ficha apilada
     con su etiqueta delante, en vez de 12 columnas imposibles de leer. */
  .scroll{max-height:none;overflow:visible}
  #tb tr, #tb td{display:block}
  table thead{display:none}
  #tb tr.row{border:1px solid #e5e0d6;border-radius:10px;padding:9px 11px;margin-bottom:9px;
   background:#fff}
  #tb tr.hl{background:#fff6e0 !important;border-color:#e3c88a}
  #tb td{border:0;padding:3px 0;display:flex;align-items:baseline;justify-content:space-between;
   gap:12px;text-align:right;font-size:12.5px}
  #tb td::before{content:attr(data-l);color:#8a8578;font-size:11px;font-weight:600;
   text-align:left;flex:0 0 auto}
  #tb td[data-l="Nº nuevo"]{font-size:17px;border-bottom:1px solid #f1ede4;
   padding-bottom:6px;margin-bottom:4px}
  /* lo secundario no se muestra: está todo en la ficha */
  #tb td[data-l="Contacto"],#tb td[data-l="Útil m²"],#tb td[data-l="Pactado"],
  #tb td[data-l="Pagado"],#tb td[data-l="Próximo vto."],#tb td[data-l="Últ. contacto"]{display:none}
  /* la tabla de unidades suprimidas se queda con lo esencial */
  .card > table th:nth-child(5), .card > table td:nth-child(5){display:none}
  .filters{gap:5px}
  .fb{padding:5px 11px;font-size:12px;min-height:34px}
  #filters::after{content:"Toca una ficha para ver todo el detalle";display:block;width:100%;
   font-size:11px;color:#8a8578;margin:1px 0 -4px}

  .fh b{font-size:26px}
  .kvrow{font-size:12.5px}
  .actions button{min-height:44px}
  /* iOS amplía la página al enfocar un campo de menos de 16px */
  input,select,textarea{font-size:16px}
  textarea{min-height:110px}

  .alert{padding:12px 13px;font-size:12.5px}
  .alert ul{padding-left:16px}
  footer{font-size:10.5px}
}

@media (max-width: 420px) {
  .kpis{grid-template-columns:1fr}
  .bar button{flex:1 1 100%}
  .num{font-size:54px}
}

.anx-i{margin:-6px 0 14px;font-size:12.5px;color:#8a8578}
#anexo{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:12px}
.anx{border:1px solid #e5e0d6;border-radius:10px;padding:12px 14px;background:#fffdf9;scroll-margin-top:12px}
.anx:target{border-color:#c2410c;box-shadow:0 0 0 3px #fde3cf}
.anx-h{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
 border-bottom:1px solid #eee7db;padding-bottom:7px;margin-bottom:7px}
.anx-h b{font-size:24px;line-height:1}
.anx-h span:first-of-type{font-size:12px;color:#8a8578}
.anx .kvrow{padding:4px 0;font-size:12.5px}
.anx .nota{margin-top:9px;font-size:12px}
html.js a.ancla{pointer-events:none;color:inherit;text-decoration:none}
a.ancla{color:#26241f;text-decoration:underline;text-underline-offset:2px}
@media (max-width:760px){ #anexo{grid-template-columns:1fr;gap:10px} .anx-h b{font-size:21px} }

/* Estilos añadidos para la versión compartida */
.user{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:#3a352d;padding:6px 10px;border:1px solid #e5e0d6;border-radius:7px;background:#fff}
.dot{width:9px;height:9px;border-radius:50%;background:#c7c1b5;display:inline-block}
.dot.ok{background:#1f9d55;box-shadow:0 0 0 3px #d6f5e3}
.dot.ko{background:#c81e1e;box-shadow:0 0 0 3px #fbdcdc}
.who{margin-top:10px;font-size:11.5px;color:#8a8578;border-top:1px dashed #e5e0d6;padding-top:8px}
.hist{max-height:360px;overflow:auto;display:flex;flex-direction:column;gap:6px}
.hx{border:1px solid #ece7dc;border-radius:8px;padding:8px 11px;background:#fffdf9;cursor:pointer;font-size:12.5px}
.hx:hover{background:#f7f3ea}
.hx.small{cursor:default;padding:6px 9px;font-size:12px}
.hx.small:hover{background:#fffdf9}
.hx-h{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:3px}
.hx-t{color:#8a8578;font-size:11.5px;font-variant-numeric:tabular-nums}
.hx-n{color:#6b665c}
.hx-c{display:flex;flex-wrap:wrap;gap:4px 14px}
.chg i{font-style:normal;color:#6b665c}
.hist-t{margin-top:14px}
.hist-t h3{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:#6b665c;margin:0 0 6px}
.conf{background:#fff8e6;border:1px solid #f0dfae;border-left:4px solid #d97706;border-radius:0 8px 8px 0;padding:10px 12px;margin:8px 0 12px;font-size:12.5px;color:#7a5b1e}
.conf .actions{margin-top:8px}
.modal{position:fixed;inset:0;background:rgba(38,36,31,.45);display:flex;align-items:center;justify-content:center;z-index:60;padding:16px}
.mbox{background:#fff;border-radius:12px;padding:22px 24px;width:min(420px,100%);max-height:92vh;overflow:auto;box-shadow:0 12px 40px rgba(0,0,0,.18)}
.mbox.wide{width:min(760px,100%)}
.mbox h2{margin-top:0}
.mbox h3{font-size:13px;margin:18px 0 6px;color:#6b665c}
.mbox p{font-size:13px;color:#6b665c;margin:0 0 10px}
.mbox .actions{margin-top:14px;display:flex;gap:8px;flex-wrap:wrap}
.err{color:#c81e1e;font-size:12.5px;min-height:18px;margin-top:8px}
.three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
@media(max-width:600px){.three{grid-template-columns:1fr}}
#users-list table{margin-bottom:6px}
#users-list td button{margin:2px 4px 2px 0;padding:4px 9px;font-size:12px}
details.anx-det>summary{cursor:pointer;list-style:none}
details.anx-det>summary h2{display:inline;margin:0}
details.anx-det>summary::before{content:"▸ ";color:#6b665c}
details.anx-det[open]>summary::before{content:"▾ "}
details.anx-det[open]>summary{margin-bottom:12px}
.modal[hidden],[hidden]{display:none!important}
