/* ===== Panel · reporte drag & drop por módulo ===== */
/* Todo va bajo .pv para no chocar con el CSS de los demás módulos. */
.pn-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto;scrollbar-width:thin}
.pn-tabs .tab{white-space:nowrap}
.pn-rango{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.pn-rango label{font-size:12.5px;color:var(--muted);display:flex;gap:6px;align-items:center}
.pn-rango .inp{width:auto;padding:6px 8px}

.pv{--pv-bar:rgba(18,133,125,.16);color:var(--ink)}
/* :where deja la regla sin peso, para que la ganen los estilos propios (.pv-field.used, .btn-p). */
:where(.pv) button:not(.btn),.pv input,.pv select{font:inherit;color:inherit}


.pv-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}
.pv-tools .inp{width:auto;padding:6px 8px}
.pv-tools .sp{flex:1}
.pn-barra{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.pn-barra .inp{width:auto;max-width:260px;padding:6px 8px}

.pv-app{display:grid;grid-template-columns:230px minmax(0,1fr);gap:14px}
@media (max-width:900px){.pv-app{grid-template-columns:minmax(0,1fr)}}
/* Sin esto la columna toma el ancho de la tabla más ancha y el panel de campos se sale de la pantalla. */
.pv-app>*{min-width:0}

.pv-side{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:12px;align-self:start;position:sticky;top:12px;max-height:calc(100vh - 24px);overflow:auto}
@media (max-width:900px){.pv-side{position:static;max-height:none}}
.pv-side.over{border-color:var(--green)}
.pv-side h2{margin:12px 0 6px;font:600 12px var(--fd);color:var(--muted);letter-spacing:.04em;text-transform:uppercase}
.pv-search{width:100%;border:1px solid var(--line-2);background:var(--surface-2);border-radius:var(--r-sm);padding:7px 9px}
.pv-field{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:5px 8px;border-radius:6px;cursor:grab;font-size:13px}
.pv-field:hover{background:var(--surface-2)}
.pv-field i{font-style:normal;width:18px;height:18px;border-radius:4px;display:grid;place-items:center;font-size:11px;font-weight:700;flex:none}
.pv-field.dim i{border:1.5px solid var(--blue);color:var(--blue)}
.pv-field.mea i{background:var(--green);color:#fff}
.pv-field.used{color:var(--muted-2)}
.pv-field.used::after{content:"en uso";margin-left:auto;font-size:11px}
.pv-hint{color:var(--muted);font-size:12.5px}
.pv-side .pv-hint{margin-top:10px}

.pv-zones{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:640px){.pv-zones{grid-template-columns:1fr}}
.pv-zone{border:1.5px dashed var(--line-2);border-radius:var(--r-sm);padding:8px 10px 10px;min-height:70px;background:var(--surface);transition:border-color .12s,background .12s}
.pv-zone.over{border-color:var(--green);border-style:solid;background:var(--green-soft)}
.pv-zone.no{opacity:.45}
.pv-zone h3{margin:0 0 6px;font:600 13px var(--fd);display:flex;justify-content:space-between;gap:8px}
.pv-zone h3 small{font:400 12px var(--fb);color:var(--muted)}
.pv-chips{display:flex;flex-wrap:wrap;gap:6px;min-height:30px;align-items:center}
.pv-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 4px 3px 10px;border-radius:999px;font-size:13px;cursor:grab;user-select:none;border:1px solid;background:var(--surface)}
.pv-chip.dim{border-color:var(--blue);color:var(--blue-ink);background:var(--blue-soft)}
.pv-chip.mea{background:var(--green);border-color:var(--green);color:#fff}
.pv-chip.flt{border-color:var(--gold);background:var(--gold-soft);color:var(--gold-ink);cursor:pointer}
.pv-chip.drag{opacity:.4}
.pv-chip .x{width:22px;height:22px;border-radius:50%;font-size:15px;line-height:1;color:inherit}
.pv-chip .x:hover{background:rgba(0,0,0,.08)}
.pv-ph{color:var(--muted-2);font-size:12.5px}

.pv-res{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);margin-top:12px;overflow:hidden}
.pv-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--line)}
.pv-seg{display:inline-flex;border:1px solid var(--line-2);border-radius:var(--r-sm);overflow:hidden}
.pv-seg button{padding:5px 12px;font-size:13px}
.pv-seg button[aria-pressed=true]{background:var(--navy);color:#fff}
.pv-meta{margin-left:auto;color:var(--muted);font-size:12.5px}
.pv-warn{padding:8px 12px;font-size:12.5px;color:var(--gold-ink);background:var(--gold-soft);border-bottom:1px solid var(--line)}
.pv-wrap{overflow:auto;max-height:70vh}
.pv table{border-collapse:separate;border-spacing:0;width:100%;font-variant-numeric:tabular-nums}
.pv th,.pv td{padding:0 12px;height:32px;border-bottom:1px solid var(--line);white-space:nowrap;font-size:13px}
.pv thead th{position:sticky;top:0;background:var(--surface-2);font:600 12.5px var(--fd);text-align:right;z-index:2;color:var(--ink-2)}
.pv thead tr:nth-child(2) th{top:32px}
.pv thead th.cg{text-align:center;border-left:1px solid var(--line)}
.pv thead th.s{cursor:pointer}
.pv thead th.s:hover{color:var(--green)}
.pv th.rl{text-align:left;left:0;z-index:3}
.pv td.l{position:sticky;left:0;background:var(--surface);z-index:1;text-align:left;max-width:320px;overflow:hidden;text-overflow:ellipsis}
.pv td.l button{width:20px;height:20px;padding:0;margin-right:4px;border-radius:4px;color:var(--muted)}
.pv td.l button:hover{background:var(--surface-2)}
.pv td.l .sp{display:inline-block;width:24px}
.pv td.v{text-align:right;position:relative}
.pv td.v.cs{border-left:1px solid var(--line)}
.pv td.v .b{position:absolute;right:0;top:5px;bottom:5px;background:var(--pv-bar);border-radius:3px 0 0 3px;pointer-events:none}
.pv td.v span{position:relative}
.pv tr.d0 td{font-weight:600}
.pv tr.lf td{font-weight:400}
.pv tr.tot td{font-weight:700;background:var(--surface-2);border-top:2px solid var(--navy);position:sticky;bottom:0}
.pv tr.tot td.l{z-index:2}
.pv tbody tr:hover td{background:var(--green-soft)}
.pv tbody tr.tot:hover td{background:var(--surface-2)}
.pv-empty{padding:48px 20px;text-align:center;color:var(--muted)}

.pv-chart{padding:14px 16px 18px}
.pv-chart h4{margin:0 0 12px;font:600 14px var(--fd)}
.pv-cr{display:grid;grid-template-columns:minmax(90px,220px) 1fr auto;gap:10px;align-items:center;margin:5px 0}
.pv-cl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.pv-ct{height:18px;background:var(--surface-2);border-radius:3px;overflow:hidden}
.pv-cb{display:block;height:100%;background:var(--green);border-radius:0 3px 3px 0}
.pv-cv{font-variant-numeric:tabular-nums;font-size:13px;min-width:90px;text-align:right}

.pv-pop{position:absolute;z-index:50;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);box-shadow:0 8px 28px rgba(12,42,67,.18);width:270px;padding:10px}
.pv-pop h5{margin:0 0 8px;font:600 13px var(--fd)}
.pv-pop .pv-search{margin-bottom:6px}
.pv-pop .acts{display:flex;gap:6px;margin-bottom:6px}
.pv-pop .acts button{color:var(--green);padding:2px 4px;font-size:12.5px}
.pv-pop ul{list-style:none;margin:0;padding:0;max-height:240px;overflow:auto}
.pv-pop li label{display:flex;gap:8px;align-items:center;padding:4px 2px;cursor:pointer;font-size:13px}
.pv-pop .row{display:flex;gap:6px}
.pv-pop .row input{flex:1;border:1px solid var(--line-2);background:var(--surface-2);border-radius:6px;padding:6px 8px}

.pv-toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);background:var(--navy);color:#fff;padding:9px 16px;border-radius:8px;font-size:13px;z-index:99;opacity:0;transition:opacity .2s;pointer-events:none}
.pv-toast.on{opacity:1}
@media (prefers-reduced-motion:reduce){.pv *{transition:none!important}}

/* Barra común de filtros de los dashboards (js/74-filtros-dashboard.js). */
.fdb{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;margin-bottom:14px;padding:10px 12px;
  background:var(--surface);border:1px solid var(--line);border-radius:10px}
.fdb label{font-size:12.5px;color:var(--muted);display:flex;gap:6px;align-items:center}
.fdb .inp{width:auto;padding:6px 8px;max-width:180px}
.fdb-msg{font-size:12.5px;color:var(--muted)}
@media (max-width:640px){.fdb label{flex:1 1 140px}.fdb .inp{max-width:none;flex:1}}
