/* css/ventas-compras-d3.css — Layout D3 de la vista Ventas/Compras (tooltips de la ruedita + botonera). Vivía como bloque <style> dentro de #view-operaciones.
   Movido desde el marcado para que lo cubra 'self' en la CSP: un archivo externo no
   necesita 'unsafe-inline' en `style-src-elem` ni un hash que alguien tenga que
   regenerar. El contenido es el MISMO, en el MISMO punto de la cascada. */
                      /* safe-html: estilos estáticos del layout D3 (tooltips ruedita + botonera) */
                      .vc-tooltip{position:absolute}
                      .vc-tooltip::after{content:attr(data-tooltip);position:absolute;top:calc(100% + 6px);right:0;background:#0E1A3A;color:#fff;font-size:10px;font-weight:600;padding:4px 8px;border-radius:6px;white-space:nowrap;opacity:0;pointer-events:none;transform:translateY(-2px);transition:opacity .15s ease,transform .15s ease;z-index:50}
                      .vc-tooltip:hover::after,.vc-tooltip:focus-visible::after{opacity:1;transform:translateY(0)}
                      .vc-act-btn{position:relative}
                      .vc-act-btn::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 5px);left:50%;transform:translateX(-50%) translateY(2px);background:#0E1A3A;color:#fff;font-size:10px;font-weight:600;padding:3px 8px;border-radius:6px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s ease,transform .15s ease;z-index:60}
                      .vc-act-btn:hover::after,.vc-act-btn:focus-visible::after{opacity:1;transform:translateX(-50%) translateY(0)}
                      .vc-row-actions .vc-act-btn:nth-last-child(-n+2)::after{left:auto;right:0;transform:translateY(2px)}
                      .vc-row-actions .vc-act-btn:nth-last-child(-n+2):hover::after,
                      .vc-row-actions .vc-act-btn:nth-last-child(-n+2):focus-visible::after{opacity:1;transform:translateY(0)}
                      .vc-detail-wrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows .32s ease}
                      .vc-detail-wrap.open{grid-template-rows:1fr}
                      .vc-detail-inner{overflow:hidden;min-height:0}
                      .vc-group-caret,.vc-row-caret{transition:transform .2s ease}
                      /* FilterBar sticky (punto 3): pegada arriba del área scrolleable, fondo
                         sólido ivory para no transparentar el listado debajo. --vc-fbar-h la
                         mide el JS al render para alinear la fila-título sticky de la op. */
                      #vc-filterbar{position:sticky;top:0;z-index:30;background:#FAF8F2}
                      /* Fila-título de la operación EXPANDIDA = sticky dentro del listado
                         (punto 4): queda pegada justo debajo de la FilterBar mientras se
                         scrollean las 9 secciones. Sin observers (regla 41), CSS puro. */
                      tr.vc-row.vc-row-expanded{position:sticky;top:var(--vc-fbar-h,48px);z-index:20}
                      tr.vc-row.vc-row-expanded > td{background:#FEF9E7;box-shadow:0 1px 0 0 #FDE68A}
                      /* Acordeón de Posición/Ctacte (listado columnar tipo Ventas, FIX 3):
                         el título (nombre de cuenta/operación) trunca y deja a las columnas
                         de la derecha (FACTURADO/COBRADO/SALDO) su ancho fijo intacto. */
                      .pos-acc-list .vc-acc-row > span:not(.ml-auto):not(.vc-pill){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
                      .pos-acc-list .vc-acc-row > span.ml-auto{overflow:visible;flex:none}
                      @media (prefers-reduced-motion: reduce){
                        .vc-detail-wrap,.vc-group-caret,.vc-row-caret,.vc-tooltip::after,.vc-act-btn::after{transition:none}
                      }
                    
