{"id":5,"date":"2026-07-19T01:03:42","date_gmt":"2026-07-19T05:03:42","guid":{"rendered":"https:\/\/sistemaresisven.com\/?page_id=5"},"modified":"2026-07-19T01:03:42","modified_gmt":"2026-07-19T05:03:42","slug":"sistema","status":"publish","type":"page","link":"https:\/\/sistemaresisven.com\/","title":{"rendered":"Sistema"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5\" class=\"elementor elementor-5\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2c9ca430 e-flex e-con-boxed e-con e-parent\" data-id=\"2c9ca430\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2fb5ce5e elementor-widget elementor-widget-shortcode\" data-id=\"2fb5ce5e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin><link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&display=swap\"><style>\n        :root{\n            \/* Colores de marca de este sitio \u2014 ver pv_colores_marca(), configurables\n               desde Configuraci\u00f3n \u2192 Datos generales sin tocar c\u00f3digo. Se mantiene el\n               fondo neutro y las tarjetas blancas del panel intactos (\"entorno\n               limpio\"), solo se recolorean acentos, botones y estados activos. Como\n               todo el panel consume estas variables (no colores sueltos), el cambio\n               se propaga solo a cada m\u00f3dulo. *\/\n            --pv-primary:#F5A623;\n            --pv-primary2:#D9820A;\n            --pv-primary-dark:#C9790A;\n            --pv-secondary:#3A3A3A;\n            --pv-secondary2:#1C1C1C;\n            --pv-accent:#8B1D1D;\n            --pv-accent2:#B2242C;\n            --pv-primary-rgb:245,166,35;\n            --pv-accent-rgb:139,29,29;\n            --pv-success:#22C55E;\n            --pv-success-text:#16A34A;\n            --pv-warning:#F59E0B;\n            --pv-warning-text:#D97706;\n            --pv-danger:#EF4444;\n            --pv-danger-text:#DC2626;\n            --pv-ink:#16181D;\n            --pv-muted:#8A93A6;\n            --pv-muted2:#6B7280;\n            --pv-muted3:#4B5563;\n            --pv-bg:#EEF0F6;\n            --pv-border:#ECEDF4;\n            --pv-border2:#E7E9F1;\n            --pv-font:\"Inter\",-apple-system,Segoe UI,Roboto,Arial,sans-serif;\n        }\n        \/* Fuerza nuestra tipograf\u00eda moderna dentro del panel, en vez de heredar\n           la fuente decorativa que traiga el tema de WordPress\/Elementor. *\/\n        \/* Sin esto, si el sistema\/navegador del usuario est\u00e1 en modo oscuro,\n           Chrome\/Firefox pintan los <select>\/<input> nativos con fondo negro\n           y letra blanca por su cuenta, IGNORANDO el background que ya les\n           pusimos por CSS \u2014 se ve\u00eda roto aunque el color estuviera bien\n           declarado. Esto fuerza a que siempre se rendericen en modo claro. *\/\n        .pv-wrap,.pvf-shell,.pv-modal-box{color-scheme:light}\n        \/* Elementor (u otro plugin\/tema del sitio) aplica su propio estilo\n           oscuro por defecto a los <select>\/<input>\/<textarea> nativos en\n           TODA la p\u00e1gina (ya nos pas\u00f3 antes con el Select2 de Elementor) \u2014\n           esta regla usa el m\u00e1ximo de especificidad (todo el \u00e1rbol de ids\n           encadenados) + !important para ganarle a lo que sea que lo est\u00e9\n           pintando de negro, sin tener que adivinar de d\u00f3nde viene. *\/\n        html body .pvf-shell input,html body .pvf-shell select,html body .pvf-shell textarea,\n        html body .pv-modal-box input,html body .pv-modal-box select,html body .pv-modal-box textarea{background-color:#f8fafc!important;color:#1e1b2e!important;color-scheme:light!important;-webkit-text-fill-color:#1e1b2e!important}\n        \/* Mismo problema que el de arriba, pero con los \u00edconos: Elementor\n           trae su propio sistema de \u00edconos SVG (e_font_icon_svg) con reglas\n           globales para TODO <svg> de la p\u00e1gina, pensadas para SUS \u00edconos\n           rellenos (fill), no para los nuestros (contorno: fill=\"none\",\n           stroke=\"currentColor\") \u2014 seg\u00fan c\u00f3mo pinte esa regla global, los\n           nuestros pueden quedar invisibles (relleno del mismo color que el\n           fondo) en vez de mostrarse como el trazo que son. Mismo remedio:\n           m\u00e1xima especificidad + !important, reafirmando c\u00f3mo SE SUPONE que\n           se vean nuestros propios SVG, sin tener que adivinar de d\u00f3nde\n           viene la regla que los pinta mal. *\/\n        html body .pvf-shell svg,html body .pv-wrap svg,html body .pv-modal-box svg{display:inline-block!important;visibility:visible!important;opacity:1!important;fill:none!important;stroke:currentColor!important}\n        html body .pvf-shell svg[fill]:not([fill=\"none\"]),html body .pv-wrap svg[fill]:not([fill=\"none\"]),html body .pv-modal-box svg[fill]:not([fill=\"none\"]){fill:currentColor!important;stroke:none!important}\n        .pv-wrap,.pvf-shell,.pv-modal-box{font-family:var(--pv-font)}\n        .pv-wrap *,.pvf-shell *,.pv-modal-box *{font-family:inherit!important}\n        \/* Todo el texto del sistema se muestra en min\u00fascula sin importar c\u00f3mo\n           se haya escrito\/guardado el dato, o si alg\u00fan elemento puntual ya\n           tra\u00eda su propio text-transform:uppercase (headers de tabla, badges,\n           etc. \u2014 hay varios repartidos por el c\u00f3digo) \u2014 esto es solo visual\n           (text-transform), no toca el dato real ni lo que hay en la base de\n           datos. Necesita !important sobre \"*\" para ganarle a esas reglas\n           puntuales, igual que se hace con font-family m\u00e1s arriba. Los campos\n           donde el usuario est\u00e1 escribiendo (input\/textarea) quedan afuera\n           para no mostrarle su propio texto en un formato distinto al que\n           est\u00e1 tecleando mientras lo hace. *\/\n        .pv-wrap,.pvf-shell,.pv-modal-box{text-transform:lowercase}\n        .pv-wrap *,.pvf-shell *,.pv-modal-box *{text-transform:lowercase!important}\n        .pv-wrap input,.pv-wrap textarea,.pvf-shell input,.pvf-shell textarea,.pv-modal-box input,.pv-modal-box textarea{text-transform:none!important}\n        \/* Ortograf\u00eda correcta: solo la primera letra de cada texto en\n           may\u00fascula, el resto en min\u00fascula (\"Recientes\", no \"RECIENTES\" ni\n           \"recientes\" ni \"Canal De Pedidos\"). CSS no tiene un modo nativo de\n           \"solo la primera letra de todo el bloque\", as\u00ed que se logra con\n           ::first-letter encima de la regla de min\u00fascula de arriba. Esto\n           funciona en la mayor\u00eda de los elementos (t\u00edtulos, p\u00e1rrafos, celdas\n           de tabla, botones, labels), pero por espec de CSS ::first-letter\n           NO aplica a elementos puramente inline sin caja propia (un <span>\n           suelto dentro de un <a>, por ejemplo) \u2014 si alg\u00fan texto puntual se\n           queda sin la may\u00fascula inicial, hay que ajustarlo caso por caso. *\/\n        .pv-wrap *::first-letter,.pvf-shell *::first-letter,.pv-modal-box *::first-letter{text-transform:uppercase!important}\n        \/* Excepci\u00f3n: los c\u00f3digos de divisa (USD, COP, EUR...) son siglas, no\n           palabras \u2014 deben quedar siempre en may\u00fascula completa, sin importar\n           la regla de min\u00fascula de arriba. Aplica a los switches de divisa,\n           su badge circular con la inicial, y la etiqueta peque\u00f1a que\n           acompa\u00f1a un monto (ej. \"120,00 COP\") en cualquier m\u00f3dulo. *\/\n        .pv-wrap .pv-moneda-switch-label,.pvf-shell .pv-moneda-switch-label,.pv-modal-box .pv-moneda-switch-label,\n        .pv-wrap .pv-moneda-switch-icono,.pvf-shell .pv-moneda-switch-icono,.pv-modal-box .pv-moneda-switch-icono,\n        .pv-wrap .pv-moneda-badge,.pvf-shell .pv-moneda-badge,.pv-modal-box .pv-moneda-badge{text-transform:uppercase!important}\n        \/* Excepci\u00f3n: los labels del formulario de Cotizaci\u00f3n usan\n           display:flex (.pv-campos-fila .pv-form-row label \/ .pvf-row label,\n           m\u00e1s arriba) para poder alinear el texto abajo del todo del rengl\u00f3n\n           \u2014 pero ::first-letter NO aplica a contenedores flex (no tienen\n           \"primera l\u00ednea\"), as\u00ed que con la regla de min\u00fascula de arriba esos\n           labels quedaban en min\u00fascula completa (\"fecha\", \"c\u00e9dula o rif\") en\n           vez de solo la primera letra. Se anula la transformaci\u00f3n aqu\u00ed y se\n           conf\u00eda en c\u00f3mo ya est\u00e1 escrito el texto en el PHP (may\u00fascula\n           inicial correcta, y \"RIF\" siempre en may\u00fascula completa por ser\n           sigla). Sin !important sobre \"*\" no le ganar\u00eda a la regla de la\n           l\u00ednea 96. *\/\n        .pv-cot-form label{text-transform:none!important}\n        .pv-wrap h1,.pv-wrap h2,.pv-wrap h3,.pvf-shell h1,.pvf-shell h2,.pvf-shell h3,.pv-modal-box h1,.pv-modal-box h2,.pv-modal-box h3{\n            font-family:var(--pv-font)!important;color:var(--pv-ink)!important;margin-top:0\n        }\n        \/* Escala tipogr\u00e1fica tomada tal cual del dise\u00f1o RESISVEN (Panel\n           RESISVEN.dc.html): h1 = t\u00edtulo de p\u00e1gina (24px\/800\/-0.02em en\n           todas las pantallas: \"Proveedores\", \"Historial de Pedidos\",\n           \"Cuentas Bancarias\", etc.), h2\/h3 = t\u00edtulo de tarjeta o secci\u00f3n\n           (15px\/700, sin letter-spacing). Los t\u00edtulos de modal en el dise\u00f1o\n           corren un poco m\u00e1s grandes y pesados (16-18px\/800) \u2014 se separan\n           en su propia regla m\u00e1s abajo.\n           SIN !important a prop\u00f3sito: esto es solo el valor por defecto\n           para un h1\/h2\/h3 \"pelado\" sin clase propia. Muchas secciones ya\n           tienen su tama\u00f1o espec\u00edfico bien afinado (.rv-main-welcome h2,\n           .rv-main-card h3, .rv-provider-balances-head h3, etc.) \u2014 esas\n           reglas tienen m\u00e1s especificidad (una clase de m\u00e1s) y ganan solas,\n           sin que esta regla de base las aplaste. *\/\n        .pv-wrap h1,.pvf-shell h1{font-size:24px;font-weight:800;letter-spacing:-.02em}\n        .pv-wrap h2,.pv-wrap h3,.pvf-shell h2,.pvf-shell h3{font-size:15px;font-weight:700;letter-spacing:0}\n        .pv-modal-box h1{font-size:20px;font-weight:800;letter-spacing:-.02em}\n        .pv-modal-box h2,.pv-modal-box h3{font-size:17px;font-weight:800;letter-spacing:0}\n        .pv-wrap.pvf-embed{max-width:1200px}\n        .pvf-card,.pv-card{background:#fff;border:1px solid var(--pv-border);padding:21px;margin-bottom:18px;margin-top:0;border-radius:16px;box-shadow:0 2px 10px rgba(30,27,46,.05)}\n        .pv-table,.pvf-table{width:100%;border-collapse:collapse;margin-top:11px}\n        .pv-table th,.pv-table td,.pvf-table th,.pvf-table td{border-bottom:1px solid var(--pv-border);padding:11px 9px;font-size:12px;text-align:left;vertical-align:middle}\n        .pv-table tbody tr:hover td,.pvf-table tbody tr:hover td{background:#f5f9ff}\n        .pv-table th,.pvf-table th{color:var(--pv-muted);font-weight:700;text-transform:uppercase;font-size:9.5px;letter-spacing:.04em;background:transparent;border-bottom:2px solid var(--pv-border)}\n        .pv-table td a,.pvf-table td a{font-weight:700;color:var(--pv-ink);text-decoration:none}\n        .pv-table td a:hover,.pvf-table td a:hover{color:var(--pv-primary)}\n        .pv-table td a.pvf-btn,.pvf-table td a.pvf-btn,.pv-table td a.button,.pvf-table td a.button{color:#fff}\n        .pv-table td a.pvf-btn:hover,.pvf-table td a.pvf-btn:hover,.pv-table td a.button:hover,.pvf-table td a.button:hover{color:#fff}\n        .pv-form-row,.pvf-row{margin-bottom:14px}\n        .pv-form-row label,.pvf-row label{display:block;font-weight:600;margin-bottom:6px;font-size:12px;color:var(--pv-ink)}\n        .pv-form-row input,.pv-form-row select,.pv-form-row textarea,\n        .pvf-row input,.pvf-row select,.pvf-row textarea{width:100%;max-width:420px;padding:9px 13px;border:1.5px solid var(--pv-border);border-radius:11px;font-size:13px;box-sizing:border-box;background:#f8fafc!important;color:#1e1b2e!important;color-scheme:light;transition:border-color .15s,box-shadow .15s}\n        .pv-form-row input:focus,.pvf-row input:focus,.pvf-row select:focus,.pvf-row textarea:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        .pv-input-prefijo{position:relative}\n        .pv-input-prefijo span{position:absolute;left:13px;top:50%;transform:translateY(-50%);color:var(--pv-muted);font-weight:700;font-size:13px;pointer-events:none}\n        .pv-input-prefijo input{padding-left:26px!important}\n        .pv-input-sufijo{position:relative}\n        .pv-input-sufijo span{position:absolute;right:13px;top:50%;transform:translateY(-50%);color:var(--pv-muted);font-weight:700;font-size:13px;pointer-events:none}\n        .pv-input-sufijo input{padding-right:26px!important}\n        .pvf-btn{background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff;border:none;padding:10px 20px;border-radius:11px;cursor:pointer;font-size:13px;font-weight:700;display:inline-block;text-decoration:none;box-shadow:0 4px 14px rgba(var(--pv-primary-rgb),.25);transition:transform .12s,box-shadow .12s}\n        .pvf-btn:hover{transform:translateY(-1px);box-shadow:0 6px 18px rgba(var(--pv-primary-rgb),.32);color:#fff}\n        \/* Secundario: mismo tama\u00f1o\/forma que el bot\u00f3n principal, pero en\n           contorno (fondo blanco, borde+texto de color) \u2014 as\u00ed una fila con\n           varias acciones (Transferir\/Retirar\/Ingresar\/Nuevo m\u00e9todo, etc.)\n           no se confunde visualmente con el \u00fanico bot\u00f3n \"estrella\" de la\n           pantalla, que se queda como el \u00fanico relleno solido. *\/\n        .pvf-btn-sec{background:#fff;color:var(--pv-primary-dark);border:1.5px solid var(--pv-primary);box-shadow:none}\n        .pvf-btn-sec:hover{background:var(--pv-bg);color:var(--pv-primary-dark);transform:translateY(-1px);box-shadow:none}\n        .pvf-btn-accent{background:linear-gradient(135deg,var(--pv-accent),var(--pv-accent2));color:#fff;box-shadow:0 4px 14px rgba(var(--pv-accent-rgb),.28)}\n        .pvf-btn-accent:hover{background:linear-gradient(135deg,var(--pv-accent),var(--pv-accent2));color:#fff;transform:translateY(-1px);box-shadow:0 6px 18px rgba(var(--pv-accent-rgb),.35)}\n        .pvf-btn-naranja{background:linear-gradient(135deg,#f97316,#fb923c);color:#fff;box-shadow:0 4px 14px rgba(249,115,22,.3)}\n        .pvf-btn-naranja:hover{background:linear-gradient(135deg,#f97316,#fb923c);color:#fff;transform:translateY(-1px);box-shadow:0 6px 18px rgba(249,115,22,.38)}\n        \/* .pvf-btn-del debe ir DESPUES de .pvf-btn-sec en el CSS: \"Eliminar\"\n           se pinta combinando ambas clases (contorno + rojo), y con la\n           misma especificidad (una sola clase cada regla) gana la que este\n           mas abajo en la hoja de estilos \u2014 si quedara antes, el rojo de\n           peligro nunca se veria, tapado por el contorno. *\/\n        .pvf-btn-del{background:#ef4444;color:#fff;border:none;box-shadow:0 4px 14px rgba(239,68,68,.25)}\n        .pvf-btn-del:hover{background:#dc2626;color:#fff;box-shadow:0 6px 18px rgba(239,68,68,.32)}\n        .pvf-btn-sm{padding:8px 16px;font-size:12px}\n        .pv-deuda{color:#dc2626;font-weight:700}\n        .pv-favor{color:#16a34a;font-weight:700}\n        .pv-form-seccion-borde{border-left:3px solid var(--pv-border);padding-left:12px;margin-bottom:12px}\n        .pv-form-seccion-borde .pv-form-row,.pv-form-seccion-borde .pvf-row{margin-bottom:10px}\n        .pv-form-seccion-borde-titulo{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;margin-bottom:7px}\n        .pv-form-seccion-indigo{border-left-color:var(--pv-primary)}\n        .pv-form-seccion-indigo .pv-form-seccion-borde-titulo{color:var(--pv-primary)}\n        .pv-form-seccion-teal{border-left-color:#0d9488}\n        .pv-form-seccion-teal .pv-form-seccion-borde-titulo{color:#0d9488}\n        .pv-form-seccion-amber{border-left-color:#f59e0b}\n        .pv-form-seccion-amber .pv-form-seccion-borde-titulo{color:#b45309}\n        .pv-saldo-proveedor-card{background:#fff;border:1px solid var(--pv-border);border-left:4px solid var(--pv-accent);border-radius:11px;padding:10px 14px;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}\n        .pv-saldo-proveedor-label{font-size:10px;font-weight:600;color:var(--pv-muted);text-transform:uppercase;letter-spacing:.03em}\n        .pv-saldo-proveedor-monto{font-size:19px;font-weight:500;color:var(--pv-ink);margin-top:1px}\n        .pv-total-box,.pvf-total-box{font-size:14px;margin-top:11px;background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:13px;padding:14px 16px;max-width:360px;margin-left:auto}\n        .pv-chips{display:flex;gap:7px;flex-wrap:wrap;margin:9px 0}\n        .pv-chip{padding:7px 14px;background:var(--pv-bg);border-radius:999px;text-decoration:none;font-size:11px;color:var(--pv-ink);font-weight:600;transition:background .12s}\n        .pv-chip:hover{background:#e2edfb}\n        .pv-chip.active{background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff}\n        .pv-chip-verde,.pv-chip-verde:hover{background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff}\n        .pv-chip-radio{cursor:pointer;position:relative;user-select:none;font-size:12px;padding:8px 16px}\n        .pv-chip-radio input[type=radio]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;white-space:nowrap;border:0;clip:rect(0,0,0,0)}\n        .pv-divisa-chips{margin:8px 0 0}\n        .pv-filtro-select{border-radius:999px;border:1.5px solid var(--pv-border);color:var(--pv-ink);font-weight:600;font-size:12px;padding:8px 14px;background:#fff;font-family:inherit;cursor:pointer}\n        .pv-filtro-select:hover{border-color:var(--pv-primary)}\n        .pv-filtro-select:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)}\n        .pv-moneda-badge{display:inline-block;background:#FDF0D9;color:var(--pv-primary-dark);border-radius:7px;padding:2px 8px;font-size:10px;font-weight:700;letter-spacing:.02em;margin-left:4px;white-space:nowrap}\n        .pv-pill{display:inline-block;padding:3px 10px;border-radius:999px;font-size:10px;font-weight:700}\n        .pv-pill-full{background:#dcfce7;color:#166534}\n        .pv-pill-empleado{background:#fef9c3;color:#854d0e}\n        .pv-pill-admin{background:#FDF0D9;color:var(--pv-primary-dark)}\n        .pv-estado-badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:10px;font-weight:700;white-space:nowrap}\n        .pv-estado-verde{background:#dcfce7;color:#166534}\n        .pv-estado-ambar{background:#fef3c7;color:#92400e}\n        .pv-estado-rojo{background:#fee2e2;color:#991b1b}\n        .pv-estado-gris{background:#f1f5f9;color:#475569}\n        .pv-estado-azul{background:#dbeafe;color:#1e40af}\n        .pv-estado-naranja{background:#ffedd5;color:#9a3412}\n        .pv-estado-morado{background:#f3e8ff;color:#6b21a8}\n        .pv-badge-color{display:inline-block;width:9px;height:9px;border-radius:50%;flex-shrink:0}\n        .pv-pedido-layout{display:grid;grid-template-columns:1fr 1.4fr 1fr;gap:16px;align-items:start}\n        @media (max-width:1100px){ .pv-pedido-layout{grid-template-columns:1fr} }\n        \/* El panel del frontend (.pvf-shell) es de altura fija (100vh) con su\n           propio encabezado (.pvf-topbar, 66px) y relleno (.pvf-main-body,\n           18px+25px) por encima de este contenido \u2014 100vh solo, sin restar\n           eso, hac\u00eda que el panel se calculara m\u00e1s alto que el espacio real\n           disponible y los botones del final quedaran tapados. *\/\n        .pv-pedido-col-resumen{position:sticky;top:18px;max-height:calc(100vh - 127px);overflow-y:auto}\n        @media (max-width:1100px){ .pv-pedido-col-resumen{position:static;max-height:none;overflow-y:visible} }\n        \/* Dentro del modal de edici\u00f3n (Historial), el propio modal ya hace\n           scroll completo \u2014 un segundo scroll independiente adentro solo\n           recorta contenido, as\u00ed que ah\u00ed se deja fluir normal. *\/\n        .pv-modal-editar-pedido .pv-pedido-col-resumen{position:static;max-height:none;overflow-y:visible}\n        .pv-pedido-catalogo{display:flex;flex-direction:column;gap:8px;max-height:520px;overflow-y:auto}\n        .pv-pedido-item-card{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--pv-border);border-radius:14px;transition:box-shadow .12s,border-color .12s}\n        .pv-pedido-item-card:hover{border-color:var(--pv-primary);box-shadow:0 4px 14px rgba(var(--pv-primary-rgb),.14)}\n        .pv-pedido-topbar{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-end;margin-bottom:16px;background:#fff;border:1px solid var(--pv-border);border-radius:18px;padding:14px 18px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.06)}\n        .pv-pedido-topbar-campo{display:flex;flex-direction:column;gap:5px;min-width:150px}\n        .pv-pedido-topbar-campo label{font-size:11px;font-weight:600;color:var(--pv-ink)}\n        .pv-pedido-topbar-campo input,.pv-pedido-topbar-campo select{padding:9px 13px;border:1.5px solid var(--pv-border2);border-radius:12px;font-size:13px;box-sizing:border-box;background:#F3F4F9;color:#1e1b2e;color-scheme:light;transition:border-color .15s,box-shadow .15s}\n        .pv-pedido-topbar-campo input:focus,.pv-pedido-topbar-campo select:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        .pv-pedido-2col{display:grid;grid-template-columns:1fr 380px;gap:16px;align-items:start}\n        @media (max-width:1100px){ .pv-pedido-2col{grid-template-columns:1fr} }\n        .pv-pedido-2col > *{min-width:0}\n        @media (max-width:640px){\n            \/* En tel\u00e9fono la columna de resumen deja de ser sticky (ver regla\n               de 1100px) y queda al final de una p\u00e1gina larga \u2014 el bot\u00f3n de\n               \"Generar comprobante\" terminaba abajo de todo el cat\u00e1logo,\n               hab\u00eda que bajar mucho para encontrarlo. Se fija abajo, arriba\n               de la barra de navegaci\u00f3n (.pvf-bottomnav, 64px de alto),\n               siempre visible mientras se arma el pedido.\n               NOTA: esto sigue aplicando tal cual a Fabricaci\u00f3n, que reusa\n               esta misma clase y todav\u00eda NO tiene el carrito flotante de\n               abajo \u2014 .pv-pedido-carrito-flotante (Pedidos) lo sobreescribe\n               m\u00e1s abajo con selectores m\u00e1s espec\u00edficos, sin tocar esta\n               regla de base. *\/\n            .pv-pedido-acciones-fila{position:fixed;left:0;right:0;bottom:72px;z-index:1700;background:#fff;margin:0!important;padding:10px 14px calc(env(safe-area-inset-bottom,0px) + 10px);box-shadow:0 -4px 16px rgba(16,24,40,.08);border-top:1px solid var(--pv-border)}\n            #pv-fab-form,#pv-pedido-form{padding-bottom:90px}\n        }\n        \/* Carrito flotante de \"Nuevo Pedido\" (solo Pedidos por ahora \u2014 se\n           reconoce por .pv-pedido-carrito-flotante, una clase EXTRA que\n           Fabricaci\u00f3n todav\u00eda no trae en su propia tarjeta de resumen, as\u00ed\n           que nada de esto le llega a Fabricaci\u00f3n hasta que se le agregue\n           ah\u00ed tambi\u00e9n). En escritorio, todo esto se queda oculto\/inerte y\n           .pv-pedido-col-resumen se ve exactamente igual que siempre. *\/\n        .pv-pedido-sheet-handle,.pv-pedido-sheet-head,.pv-pedido-cart-fab,.pv-pedido-sheet-backdrop{display:none}\n        \/* Calendario propio de \"Fecha\" (Pedidos, m\u00f3vil) \u2014 el selector nativo\n           de fecha no se puede restylear con CSS en ning\u00fan navegador, as\u00ed\n           que en m\u00f3vil se reemplaza visualmente por este calendario a la\n           medida; el <input type=\"date\"> real se queda oculto pero sigue\n           siendo el que de verdad se env\u00eda en el formulario (el calendario\n           solo le escribe el valor). En escritorio se queda oculto y el\n           selector nativo de siempre sigue mandando. *\/\n        .pv-fecha-combo{display:none}\n        @media (max-width:640px){\n            \/* Carrito flotante como tarjeta CENTRADA (2026-07-15, revierte\n               el panel-desde-abajo anterior) \u2014 mismo pedido que el de los\n               modales normales: \"que se despliegue en el centro de la\n               pantalla\". Con opacity+scale en vez de solo translateY: al\n               estar centrado, la tarjeta cerrada queda f\u00edsica y\n               exactamente encima del contenido de atr\u00e1s (ya no fuera de\n               pantalla como con el sheet que se deslizaba desde abajo), as\u00ed\n               que necesita opacity:0 + pointer-events:none mientras est\u00e1\n               cerrada para no bloquear los clics\/scroll de la pantalla de\n               atr\u00e1s. El fondo oscuro (.pv-pedido-sheet-backdrop) se sigue\n               usando igual, para cerrar tocando afuera. *\/\n            .pv-pedido-col-resumen.pv-pedido-carrito-flotante{\n                position:fixed;left:50%;top:50%;right:auto;bottom:auto;\n                width:calc(100vw - 36px);max-width:420px;\n                max-height:82vh;margin:0;\n                border-radius:20px;\n                box-shadow:0 20px 60px rgba(30,27,46,.35);\n                z-index:1850;\n                overflow-y:auto;\n                opacity:0;pointer-events:none;\n                transform:translate(-50%,-50%) scale(.96);\n                transition:transform .22s ease,opacity .2s ease;\n            }\n            .pv-pedido-col-resumen.pv-pedido-carrito-flotante.pv-pedido-sheet-open{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}\n            .pv-pedido-sheet-titulo-desktop{display:none}\n            \/* La manija de \"deslizar\" (.pv-pedido-sheet-handle) ya no aplica\n               \u2014 era la se\u00f1a visual de \"arrastra para cerrar\" del panel de\n               abajo, no tiene sentido en una tarjeta centrada. Se deja\n               apagada (hereda el display:none de la l\u00ednea de arriba en\n               este archivo) en vez de encenderla ac\u00e1 como antes. *\/\n            .pv-pedido-sheet-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px 6px;flex-shrink:0}\n            .pv-pedido-sheet-close{width:26px;height:26px;border-radius:50%;background:var(--pv-bg);border:none;color:var(--pv-muted);font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center}\n            .pv-pedido-sheet-backdrop{display:block;position:fixed;inset:0;background:rgba(28,28,32,.32);-webkit-backdrop-filter:blur(16px) saturate(160%);backdrop-filter:blur(16px) saturate(160%);z-index:1840;opacity:0;pointer-events:none;transition:opacity .25s ease}\n            .pv-pedido-sheet-backdrop.pv-pedido-sheet-open{opacity:1;pointer-events:auto}\n            .pv-pedido-cart-fab{display:flex;align-items:center;justify-content:center;position:fixed;right:16px;bottom:88px;width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));color:#fff;border:none;box-shadow:0 10px 24px rgba(201,121,10,.4);z-index:1830;transform:scale(0);opacity:0;transition:transform .25s cubic-bezier(.34,1.56,.64,1),opacity .2s ease}\n            .pv-pedido-cart-fab svg{width:23px;height:23px}\n            .pv-pedido-cart-fab.pv-pedido-cart-fab-show{transform:scale(1);opacity:1}\n            .pv-pedido-cart-badge{position:absolute;top:-3px;right:-3px;background:var(--pv-accent2);color:#fff;font-size:10.5px;font-weight:800;min-width:20px;height:20px;padding:0 4px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid #fff}\n            \/* Dentro del carrito flotante, el bot\u00f3n \"Generar Comprobante\"\n               queda pegado abajo DEL PANEL (sticky en su propio scroll), no\n               fijo a toda la pantalla como en la regla gen\u00e9rica de arriba \u2014\n               esta es m\u00e1s espec\u00edfica (2 clases) as\u00ed que la gana sin tocar\n               la regla que sigue usando Fabricaci\u00f3n. *\/\n            .pv-pedido-carrito-flotante .pv-pedido-acciones-fila{position:sticky;left:auto;right:auto;bottom:0;background:#fff;padding:10px 0 calc(env(safe-area-inset-bottom,0px) + 10px);box-shadow:0 -4px 16px rgba(16,24,40,.08);border-top:1px solid var(--pv-border);margin:0!important}\n            #pv-pedido-form{padding-bottom:20px}\n            \/* Cat\u00e1logo de \"Nuevo Pedido\" en 2 columnas fijas (no auto-fill) \u2014\n               con el padding anidado de p\u00e1gina+tarjeta+columna, minmax(160px)\n               casi nunca alcanzaba a caber 2 en el ancho real de un tel\u00e9fono\n               y todo terminaba en 1 sola columna, muy angosta y desperdiciada.\n               Scoped a #pv-pedido-form para no tocar a Fabricaci\u00f3n (comparte\n               la misma clase .pv-pedido-grid) hasta que le toque su turno. *\/\n            #pv-pedido-form .pv-pedido-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n            \/* Tarjeta de campos de arriba (Canal\/Ubicaci\u00f3n\/Fecha\/Ajuste%):\n               de 5 campos apilados uno por fila (cada uno ocupaba el ancho\n               completo) a una grilla de 2 columnas \u2014 Canal+Ubicaci\u00f3n en una\n               fila, Fecha+Ajuste% en la siguiente. La Divisa se oculta ac\u00e1\n               (ver regla de abajo): ya existe el bot\u00f3n \"Divisas\" global del\n               encabezado, que sincroniza este mismo selector por su cuenta\n               (pv_moneda_switch_script(), rama \"radioLocal\") \u2014 no hace\n               falta repetirlo aqu\u00ed y compet\u00eda por espacio. Scoped a\n               #pv-pedido-form, mismo motivo que arriba. *\/\n            #pv-pedido-form .pv-pedido-topbar{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:start;padding:14px}\n            #pv-pedido-form .pv-pedido-topbar-campo{min-width:0;margin-bottom:0!important}\n            #pv-pedido-form .pv-pedido-topbar-campo label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;margin:0 0 5px!important;font-weight:600!important;font-size:11px!important}\n            #pv-pedido-form .pv-pedido-topbar-campo select,\n            #pv-pedido-form .pv-pedido-topbar-campo input,\n            #pv-pedido-form .pv-pedido-topbar-campo .pv-combo-trigger{width:100%;min-width:0;box-sizing:border-box;height:36px;padding:0 10px!important;font-size:12px;background:#F3F4F9!important;margin:0;max-width:100%}\n            \/* \"Fecha\" trae tambi\u00e9n la clase .pvf-row (formulario gen\u00e9rico),\n               que le mete su propio padding\/fondo por !important y lo\n               desalineaba frente a \"Ajuste %\" (que no tiene esa clase) \u2014\n               los !important de arriba lo neutralizan para que ambos campos\n               queden id\u00e9nticos. *\/\n            \/* .pv-combo-trigger es un <button>, no un <select> \u2014 necesita su\n               propio texto forzado a 1 sola l\u00ednea (antes \"Todos los\n               almacenes\" se part\u00eda en 2 y quedaba m\u00e1s alto que su vecino de\n               al lado, desalineando la fila); ahora dice \"Almacenes\" y con\n               esto no vuelve a pasar aunque el nombre de alg\u00fan almac\u00e9n sea\n               largo. *\/\n            #pv-pedido-form .pv-pedido-topbar-campo .pv-combo-trigger{display:flex;align-items:center}\n            #pv-pedido-form .pv-pedido-topbar-campo .pv-combo-trigger-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:12px}\n            #pv-pedido-form .pv-pedido-divisa-campo{display:none}\n            \/* El desplegable de \"Ubicaci\u00f3n\" (.pv-combo-panel) tra\u00eda un\n               min-width:230px pensado para escritorio \u2014 en la grilla angosta\n               de 2 columnas de m\u00f3vil eso lo hac\u00eda m\u00e1s ancho que su propio\n               bot\u00f3n y se sal\u00eda de la tarjeta. Se ancla al borde DERECHO del\n               bot\u00f3n (en vez de izquierdo) porque Ubicaci\u00f3n es la columna de\n               la derecha \u2014 as\u00ed el panel crece hacia adentro de la tarjeta,\n               nunca hacia afuera de la pantalla. *\/\n            #pv-pedido-form .pv-combo-panel{left:auto;right:0;min-width:0;width:min(230px,calc(100vw - 64px))}\n            \/* Calendario propio de \"Fecha\" \u2014 ver comentario junto a\n               .pv-fecha-combo{display:none} m\u00e1s arriba. *\/\n            #pv-pedido-form #pv-pedido-fecha-nativo{display:none}\n            #pv-pedido-form .pv-fecha-combo{display:block;position:relative}\n            #pv-pedido-form .pv-fecha-trigger{width:100%}\n            #pv-pedido-form .pv-fecha-panel{left:0;right:auto;min-width:0;width:min(272px,calc(100vw - 44px));padding:14px}\n            #pv-pedido-form .pv-fecha-panel-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}\n            #pv-pedido-form .pv-fecha-panel-mes{font-size:13px;font-weight:800;color:var(--pv-ink);text-transform:capitalize}\n            #pv-pedido-form .pv-fecha-nav{width:28px;height:28px;border-radius:9px;border:1.5px solid var(--pv-border2);background:#fff;color:var(--pv-muted3);font-size:16px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer}\n            #pv-pedido-form .pv-fecha-nav:hover{border-color:var(--pv-primary);color:var(--pv-primary-dark)}\n            #pv-pedido-form .pv-fecha-panel-dow{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:4px}\n            #pv-pedido-form .pv-fecha-panel-dow span{text-align:center;font-size:9.5px;font-weight:800;text-transform:uppercase;color:var(--pv-muted);letter-spacing:.02em}\n            #pv-pedido-form .pv-fecha-panel-dias{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}\n            #pv-pedido-form .pv-fecha-dia{width:100%;aspect-ratio:1;border:none;background:none;border-radius:9px;font-size:12px;font-weight:600;color:var(--pv-ink);cursor:pointer;display:flex;align-items:center;justify-content:center}\n            #pv-pedido-form .pv-fecha-dia:hover{background:var(--pv-bg)}\n            #pv-pedido-form .pv-fecha-dia.pv-fecha-dia-otro{color:var(--pv-muted);opacity:.5}\n            #pv-pedido-form .pv-fecha-dia.pv-fecha-dia-hoy{box-shadow:inset 0 0 0 1.5px var(--pv-accent2);color:var(--pv-accent2);font-weight:800}\n            #pv-pedido-form .pv-fecha-dia.pv-fecha-dia-sel{background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));color:#fff;font-weight:800;box-shadow:0 4px 10px rgba(201,121,10,.35)}\n            #pv-pedido-form .pv-fecha-panel-foot{display:flex;justify-content:flex-end;margin-top:10px;padding-top:10px;border-top:1px solid var(--pv-border)}\n            #pv-pedido-form .pv-fecha-hoy{border:none;background:none;color:var(--pv-primary-dark);font-size:12px;font-weight:800;cursor:pointer;padding:4px 6px}\n            \/* Buscador + \"Personalizar vista\" en la misma fila \u2014 la tuerca\n               queda AL LADO del buscador (no encima\/adentro), como un bot\u00f3n\n               circular chico aparte: ~90% buscador, ~10% tuerca. *\/\n            #pv-pedido-form .pv-pedido-search-row{flex-wrap:nowrap;align-items:center}\n            #pv-pedido-form .pv-historial-buscar-input{flex:1 1 auto;width:auto;min-width:0}\n            #pv-pedido-form .pv-personalizar-wrap{position:relative;flex-shrink:0}\n            #pv-pedido-form .pv-personalizar-btn{position:relative;width:34px;height:34px;padding:0;border:1.5px solid var(--pv-border2);background:#fff;border-radius:50%;justify-content:center;gap:0}\n            #pv-pedido-form .pv-personalizar-btn:hover,\n            #pv-pedido-form .pv-personalizar-btn.open{border-color:var(--pv-primary);background:var(--pv-bg)}\n            #pv-pedido-form .pv-personalizar-icono{font-size:14px}\n            #pv-pedido-form .pv-personalizar-texto{display:none}\n            #pv-pedido-form .pv-personalizar-badge{position:absolute;top:-3px;right:-3px;min-width:14px;height:14px;font-size:8px;padding:0}\n            #pv-pedido-form .pv-personalizar-panel{right:0;min-width:0;width:min(220px,calc(100vw - 44px))}\n            \/* Misma caja blanca de fondo que ya quitamos en Inventario\n               (Productos\/Movimientos\/Servicios\/Pedidos-historial): el\n               cat\u00e1logo de \"Nuevo Pedido\" ya es buscador + chips + tarjetas\n               de producto, no necesita otra tarjeta blanca por detr\u00e1s.\n               Scoped a #pv-pedido-form (no toca Fabricaci\u00f3n, que comparte\n               esta misma clase .pv-pedido-col-catalogo, hasta que le\n               toque su turno). *\/\n            #pv-pedido-form .pv-pedido-col-catalogo{background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n        }\n        .pv-pedido-categoria-pills{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;padding-bottom:4px;-webkit-overflow-scrolling:touch;min-width:0}\n        .pv-pedido-categoria-pills .pv-chip{cursor:pointer;border:none;flex-shrink:0}\n        .pv-pedido-seccion-titulo{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--pv-muted);font-weight:700;margin:18px 0 8px}\n        .pv-pedido-col-catalogo{min-width:0;overflow:hidden}\n        .pv-pedido-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;min-width:0}\n        .pv-pedido-card{border:1px solid var(--pv-border);border-radius:12px;padding:12px;display:flex;flex-direction:column;gap:6px;transition:box-shadow .12s,border-color .12s;background:#fff;min-width:0}\n        .pv-pedido-card:hover{border-color:var(--pv-primary);box-shadow:0 4px 14px rgba(var(--pv-primary-rgb),.1)}\n        .pv-pedido-card-top{display:flex;justify-content:space-between;font-size:10.5px;color:var(--pv-muted);font-weight:700;gap:4px;min-width:0}\n        .pv-pedido-card-top span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}\n        .pv-pedido-card-top span:last-child{white-space:nowrap;flex-shrink:0}\n        .pv-pedido-card-nombre{font-size:13px;font-weight:700;color:var(--pv-ink);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:34px;overflow-wrap:break-word;word-break:break-word}\n        .pv-pedido-card-estado{display:flex;align-items:center;justify-content:space-between;gap:6px;min-width:0}\n        .pv-pedido-card-estado .pv-estado-badge{padding:3px 8px;font-size:10px}\n        .pv-pedido-ver-foto-btn{display:flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:1px solid var(--pv-border);border-radius:7px;background:#f8fafc;color:var(--pv-muted);cursor:pointer;flex-shrink:0}\n        .pv-pedido-ver-foto-btn:hover{border-color:var(--pv-primary);color:var(--pv-primary)}\n        .pv-pedido-card-precio{font-size:15px;font-weight:800;color:var(--pv-primary-dark);margin-top:auto;overflow-wrap:break-word;word-break:break-word}\n        .pv-pedido-card-btn{padding:9px 10px;font-size:12.5px;border-radius:8px;box-shadow:none;width:100%;box-sizing:border-box}\n        .pv-chip-servicio{background:linear-gradient(135deg,#7c3aed,#a78bfa);color:#fff;font-size:8px;padding:2px 6px}\n        .pv-combo{position:relative}\n        .pv-combo-trigger{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#fff;border:1.5px solid var(--pv-border);border-radius:12px;padding:9px 13px;font-size:13px;font-weight:600;color:var(--pv-ink);font-family:inherit;cursor:pointer;min-width:170px;transition:border-color .12s,box-shadow .12s}\n        .pv-combo-trigger:hover{border-color:var(--pv-primary)}\n        .pv-combo-trigger.open{border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)}\n        .pv-combo-trigger-chevron{color:var(--pv-muted);font-size:11px;transition:transform .15s}\n        .pv-combo-trigger.open .pv-combo-trigger-chevron{transform:rotate(180deg)}\n        .pv-combo-panel{position:absolute;top:calc(100% + 6px);left:0;min-width:230px;background:#fff;border:1px solid var(--pv-border);border-radius:14px;box-shadow:0 10px 30px rgba(30,27,46,.15);padding:8px;z-index:60}\n        .pv-combo-panel-izq{left:auto;right:0}\n        .pv-combo-panel[hidden]{display:none}\n        .pv-combo-buscar{width:100%;box-sizing:border-box;padding:8px 12px;border:1.5px solid var(--pv-border);border-radius:10px;font-size:12.5px;font-family:inherit;margin-bottom:6px}\n        .pv-combo-buscar:focus{outline:none;border-color:var(--pv-primary)}\n        .pv-combo-lista{display:flex;flex-direction:column;gap:2px;max-height:220px;overflow-y:auto}\n        .pv-combo-opcion{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;cursor:pointer;font-size:12.5px;font-weight:600;color:var(--pv-ink)}\n        .pv-combo-opcion:hover{background:var(--pv-bg)}\n        .pv-combo-opcion.active{background:#FDF0D9;color:var(--pv-primary-dark)}\n        .pv-combo-avatar{width:22px;height:22px;border-radius:50%;background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;flex-shrink:0}\n        .pv-combo-check{margin-left:auto;color:var(--pv-primary);font-weight:800;display:none}\n        .pv-combo-opcion.active .pv-combo-check{display:inline}\n        .pv-personalizar-wrap{position:relative}\n        .pv-personalizar-btn{display:flex;align-items:center;gap:7px;background:#fff;border:1.5px solid var(--pv-border);border-radius:12px;padding:9px 14px;font-size:12.5px;font-weight:600;color:var(--pv-ink);font-family:inherit;cursor:pointer;white-space:nowrap;transition:border-color .12s}\n        .pv-personalizar-btn:hover{border-color:var(--pv-primary)}\n        .pv-personalizar-icono{font-size:13px}\n        .pv-personalizar-badge{background:var(--pv-primary);color:#fff;border-radius:999px;min-width:18px;height:18px;display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:800;padding:0 5px}\n        .pv-personalizar-panel{position:absolute;top:calc(100% + 6px);right:0;min-width:220px;background:#fff;border:1px solid var(--pv-border);border-radius:14px;box-shadow:0 10px 30px rgba(30,27,46,.15);padding:10px 14px;z-index:60}\n        .pv-personalizar-panel[hidden]{display:none}\n        .pv-personalizar-fila{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:9px 0;border-bottom:1px solid var(--pv-border);font-size:12.5px;font-weight:600;color:var(--pv-ink);cursor:pointer}\n        .pv-personalizar-fila:last-child{border-bottom:none}\n        .pv-personalizar-fila input[type=\"checkbox\"]{width:17px;height:17px;accent-color:var(--pv-primary);cursor:pointer}\n        .pvf-items-row td{padding:5px 5px}\n        .pv-detalle-toggle{cursor:pointer;color:var(--pv-primary);font-weight:600;font-size:11px;text-decoration:underline;background:none;border:none;padding:0}\n        .pv-detalle-box{display:none;background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:13px;padding:11px 14px;margin:5px 0 12px}\n        .pv-detalle-box.open{display:block}\n        .pv-detalle-flecha{cursor:pointer;background:none;border:none;padding:0;font-size:18px;line-height:1;color:var(--pv-primary);transition:transform .15s}\n        .pv-detalle-flecha.open{transform:rotate(90deg)}\n        .pv-detalle-fila-compacta{font-size:7px;font-weight:700;text-transform:lowercase;padding:7px 6px}\n        .pv-detalle-fila-compacta strong{font-weight:700}\n        .pv-btn-outline{display:inline-flex;align-items:center;justify-content:center;gap:4px;background:#fff;border:1.5px solid;border-radius:999px;padding:4px 10px;font-size:9.5px;font-weight:700;cursor:pointer;white-space:nowrap;text-decoration:none;box-sizing:border-box}\n        .pv-btn-outline svg{width:12px;height:12px}\n        .pv-detalle-fila-compacta .pv-historial-acciones{display:flex;align-items:center;justify-content:center;gap:4px;min-width:0}\n        .pv-detalle-fila-compacta > div{min-width:0;overflow-wrap:anywhere;word-break:break-word;text-align:center}\n        .pv-detalle-box .pv-historial-header{text-align:center}\n        .pv-btn-outline-verde{border-color:#16a34a;color:#16a34a}\n        .pv-btn-outline-verde:hover{background:#f0fdf4;color:#16a34a}\n        .pv-btn-outline-azul{border-color:#2563eb;color:#2563eb}\n        .pv-btn-outline-azul:hover{background:#eff6ff;color:#2563eb}\n        .pv-btn-outline-rojo{border-color:#dc2626;color:#dc2626}\n        .pv-btn-outline-rojo:hover{background:#fef2f2;color:#dc2626}\n        .pv-btn-outline-accent{background:linear-gradient(135deg,var(--pv-accent),var(--pv-accent2));border-color:transparent;color:#fff}\n        .pv-btn-outline-accent:hover{background:linear-gradient(135deg,var(--pv-accent),var(--pv-accent2));color:#fff}\n        .pv-acciones-kebab{background:none;border:none;font-size:18px;line-height:1;cursor:pointer;color:var(--pv-muted);padding:4px 8px}\n        .pv-acciones-menu{position:absolute;right:0;top:100%;margin-top:4px;background:#fff;border:1px solid var(--pv-border);border-radius:13px;box-shadow:0 10px 30px rgba(30,27,46,.18);padding:10px;display:flex;flex-direction:column;gap:8px;z-index:50;min-width:150px}\n        .pv-acciones-menu[hidden]{display:none}\n        .pv-ficha-header{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:9px;margin-bottom:5px}\n        .pv-comprobante-thumb{max-height:44px;max-width:64px;border:1px solid var(--pv-border);border-radius:7px;object-fit:cover}\n        .pv-notice{position:fixed;top:18px;right:18px;left:auto;z-index:99999;max-width:340px;padding:13px 18px;border-radius:13px;margin:0 0 10px;font-size:12px;font-weight:700;color:#fff;box-shadow:0 10px 30px rgba(30,27,46,.2);animation:pv-toast-in .25s ease}\n        .pv-notice + .pv-notice{margin-top:58px}\n        .pv-notice-ok{background:#16a34a}\n        .pv-notice-error{background:#dc2626}\n        @keyframes pv-toast-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}\n        .pv-tab-radio{display:none}\n        .pv-tabs-nav{display:flex;gap:7px;margin-bottom:16px;flex-wrap:wrap}\n        .pv-tab-label{padding:9px 18px;border-radius:999px;background:var(--pv-bg);color:var(--pv-ink);font-weight:700;font-size:12px;cursor:pointer;transition:background .12s,color .12s;user-select:none}\n        .pv-tab-label:hover{background:#e2edfb}\n        .pv-tab-panel{display:none}\n        #pv-tab-empresa:checked ~ .pv-tabs-nav label[for=\"pv-tab-empresa\"],\n        #pv-tab-usuarios:checked ~ .pv-tabs-nav label[for=\"pv-tab-usuarios\"],\n        #pv-tab-gastos-variables:checked ~ .pv-tabs-nav label[for=\"pv-tab-gastos-variables\"],\n        #pv-tab-gastos-fijos:checked ~ .pv-tabs-nav label[for=\"pv-tab-gastos-fijos\"]{background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff}\n        #pv-tab-empresa:checked ~ .pv-tab-panel-empresa{display:block}\n        #pv-tab-usuarios:checked ~ .pv-tab-panel-usuarios{display:block}\n        #pv-tab-gastos-variables:checked ~ .pv-tab-panel-gastos-variables{display:block}\n        #pv-tab-gastos-fijos:checked ~ .pv-tab-panel-gastos-fijos{display:block}\n        .pv-split-layout{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}\n        .pv-split-side{flex:1 1 380px;max-width:420px}\n        .pv-split-main{flex:3 1 480px;min-width:0}\n        @media (max-width:860px){ .pv-split-side{max-width:100%} }\n        .pv-campos-fila{display:flex;gap:14px;flex-wrap:wrap}\n        .pv-campo-full input,.pv-campo-full select,.pv-campo-full textarea{max-width:none!important}\n        .pv-campos-fila .pv-form-row,.pv-campos-fila .pvf-row{flex:1 1 220px;min-width:0;display:flex;flex-direction:column}\n        .pv-campos-fila .pv-form-row select,.pv-campos-fila .pv-form-row input,.pv-campos-fila .pvf-row select,.pv-campos-fila .pvf-row input{min-width:0;max-width:100%}\n        .pv-campos-fila .pv-form-row label,.pv-campos-fila .pvf-row label{min-height:31px;display:flex;align-items:flex-end}\n        .pv-form-seccion{background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:13px;padding:16px;margin-bottom:18px}\n        .pv-form-seccion .pv-form-row input,.pv-form-seccion .pv-form-row select,.pv-form-seccion .pvf-row input,.pv-form-seccion .pvf-row select{background:#fff}\n        .pv-form-seccion .pv-chip{background:#fff;border:1.5px solid var(--pv-border)}\n        .pv-form-seccion .pv-chip.active{border-color:transparent}\n        .pv-registro-layout{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}\n        .pv-registro-main{flex:3 1 480px;min-width:0}\n        .pv-resumen-box{flex:1 1 260px;max-width:300px;background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:13px;padding:16px;position:sticky;top:18px}\n        .pv-resumen-total{display:flex;flex-direction:column;gap:4px;background:#fff;border:1px solid var(--pv-border);border-radius:11px;padding:13px}\n        .pv-resumen-total span{font-size:10.5px;color:var(--pv-muted);text-transform:uppercase;letter-spacing:.03em;font-weight:700}\n        .pv-resumen-total strong{font-size:21px;color:var(--pv-primary-dark)}\n        @media (max-width:860px){ .pv-resumen-box{max-width:100%;position:static} }\n        .pv-cant-stepper{display:flex;align-items:center;gap:4px}\n        .pv-cant-btn{width:24px;height:24px;border-radius:7px;border:1px solid var(--pv-border);background:#fff;color:var(--pv-ink);font-weight:700;cursor:pointer;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:13px;line-height:1;padding:0}\n        .pv-cant-btn:hover{background:var(--pv-bg)}\n        .pv-items-card{margin-top:9px}\n        .pv-items-head{display:grid;grid-template-columns:2.2fr 150px 170px 130px 44px;gap:14px;padding:0 4px 9px;font-size:9.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--pv-muted);font-weight:700;border-bottom:2px solid var(--pv-border)}\n        .pv-items-card .pv-items-row{display:grid;grid-template-columns:2.2fr 150px 170px 130px 44px;gap:14px;align-items:center;padding:13px 4px;border-bottom:1px solid var(--pv-border)}\n        \/* Sin esto, un <select> con una opci\u00f3n de nombre largo (ej. un\n           producto de Inventario elegido) no se achica a la columna que le\n           toca \u2014 se monta encima de la celda de al lado (SKU) en vez de\n           quedarse dentro de su propio ancho. min-width:0 ya ayuda, pero\n           algunos navegadores igual insisten en el ancho del <select> seg\u00fan\n           su opci\u00f3n m\u00e1s larga aunque tenga min-width:0 \u2014 overflow:hidden en\n           la celda (el <div> que lo envuelve) es lo que de verdad garantiza\n           que nunca se salga visualmente, pase lo que haga el navegador con\n           el select por dentro. *\/\n        .pv-items-row > div{min-width:0}\n        .pv-items-input{width:100%;min-width:0;max-width:100%;padding:11px 13px;font-size:14px;font-weight:600;color:var(--pv-ink);border:1.5px solid var(--pv-border);border-radius:9px;box-sizing:border-box;background:#f8fafc;font-family:inherit}\n        .pv-items-row > div select.pv-items-input{text-overflow:ellipsis}\n        .pv-items-input:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        input[readonly],textarea[readonly]{background:#eef1f5!important;color:var(--pv-muted);cursor:not-allowed}\n        .pv-nc-bloqueado{opacity:.55;pointer-events:none}\n        .pv-cant-stepper .pv-items-input{width:52px;text-align:center;padding:11px 4px}\n        \/* Ancho para al menos 4 cifras (ej. \"9999\") \u2014 solo en Pedidos y\n           Fabricaci\u00f3n, que fue lo que se pidi\u00f3; Cotizaci\u00f3n\/Comprobante\/\n           Reponer Inventario siguen con el ancho compartido de arriba. *\/\n        #pv-pedido-form .pv-cant-stepper .pv-items-input,\n        #pv-fab-form .pv-cant-stepper .pv-items-input{width:72px}\n        .pv-items-col-total{display:none}\n        @media (max-width:760px){\n            .pv-items-head{display:none}\n            .pv-items-card .pv-items-row{grid-template-columns:1fr;gap:8px}\n            .pv-items-col-quitar{justify-self:end}\n        }\n        .pv-card-header{display:flex;align-items:flex-start;gap:11px;margin-bottom:16px}\n        .pv-card-header-icono{width:36px;height:36px;border-radius:11px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff}\n        .pv-card-header-icono svg{width:18px;height:18px}\n        .pv-card-header h2,.pv-card-header h3{margin:0 0 2px}\n        .pv-iva-opciones{display:flex;flex-direction:column;gap:9px;margin-top:7px}\n        .pv-iva-opcion{display:flex;align-items:center;gap:13px;padding:13px 14px;border:1.5px solid var(--pv-border);border-radius:13px;cursor:pointer;background:#f8fafc;transition:border-color .12s,background .12s}\n        .pv-iva-opcion:hover{border-color:var(--pv-primary)}\n        .pv-iva-opcion input[type=radio]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;white-space:nowrap;border:0;clip:rect(0,0,0,0)}\n        .pv-iva-opcion-texto{display:flex;flex-direction:column;gap:2px;flex:1}\n        .pv-iva-opcion-texto strong{font-size:12.5px;color:var(--pv-ink)}\n        .pv-iva-opcion-texto span{font-size:11px;color:var(--pv-muted)}\n        .pv-iva-opcion-icono{width:33px;height:33px;border-radius:9px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--pv-bg);color:var(--pv-muted)}\n        .pv-iva-opcion-icono svg{width:16px;height:16px}\n        .pv-iva-opcion.activa{border-color:var(--pv-primary);background:#FDF0D9}\n        .pv-iva-opcion.activa .pv-iva-opcion-icono{background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff}\n        .pv-iva-opciones-compacta{flex-direction:row;gap:6px;margin-top:8px}\n        .pv-iva-opciones-compacta .pv-iva-opcion{flex:1;padding:9px 4px;justify-content:center;text-align:center;gap:0}\n        .pv-iva-opciones-compacta .pv-iva-opcion-texto strong{font-size:10.5px;white-space:nowrap}\n        .pv-pedido-campos-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 10px;margin:14px 0}\n        .pv-carrito-item{display:flex;align-items:flex-start;gap:8px;border:1px solid var(--pv-border);border-radius:12px;padding:10px 12px;margin-bottom:8px;background:#f8fafc}\n        .pv-carrito-item-trash{flex-shrink:0;width:24px;height:24px;border-radius:8px;border:none;background:transparent;color:#991b1b;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;margin-top:2px}\n        .pv-carrito-item-trash:hover{background:#fee2e2}\n        .pv-carrito-item-nombre{flex:1;min-width:0;font-size:12.5px;font-weight:700;color:var(--pv-ink);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n        .pv-carrito-item-right{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:4px;min-width:104px}\n        .pv-carrito-item-cant-fila{display:flex;align-items:center;gap:6px}\n        .pv-carrito-item-cant-fila input{width:58px;box-sizing:border-box;padding:4px 5px;border:1.5px solid var(--pv-border);border-radius:7px;font-size:11.5px;text-align:center;font-family:inherit;background:#fff}\n        .pv-carrito-item-cant-fila input:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 3px rgba(var(--pv-primary-rgb),.12)}\n        .pv-carrito-item-tipo{font-size:10.5px;color:var(--pv-muted)}\n        .pv-carrito-item-precio{background:none;border:none;padding:0;font-size:14px;font-weight:800;color:var(--pv-primary-dark);cursor:pointer;font-family:inherit}\n        .pv-carrito-item-desc{display:flex;align-items:center;gap:6px;margin-top:2px}\n        .pv-carrito-item-desc label{font-size:9.5px;color:var(--pv-muted)}\n        .pv-carrito-item-desc input{width:82px;box-sizing:border-box;padding:4px 5px;border:1.5px solid var(--pv-border);border-radius:7px;font-size:11px;text-align:center;font-family:inherit;background:#fff}\n        .pv-fab-carrito-campos input,.pv-fab-carrito-campos select{padding:8px 11px;border:1.5px solid var(--pv-border);border-radius:9px;font-size:12.5px;box-sizing:border-box;background:#fff;color:#1e1b2e;color-scheme:light;font-family:inherit;transition:border-color .15s,box-shadow .15s}\n        .pv-fab-carrito-campos input:focus,.pv-fab-carrito-campos select:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)}\n        .pv-info-banner{display:flex;gap:13px;align-items:flex-start;background:#FDF0D9;border:1px solid #F2D18A;border-radius:13px;padding:14px 16px;color:#C9790A}\n        .pv-info-banner-icono{width:24px;height:24px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:var(--pv-primary);color:#fff}\n        .pv-info-banner-icono svg{width:14px;height:14px}\n        .pv-info-banner p{margin:0;font-size:12.5px;line-height:1.6}\n        .pv-resumen-sistema-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px;margin-bottom:11px}\n        .pv-resumen-sistema-box,.pv-resumen-sistema-row{display:flex;gap:11px;align-items:center;background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:13px;padding:13px}\n        .pv-resumen-sistema-row{margin-bottom:11px}\n        .pv-resumen-sistema-row:last-child{margin-bottom:0}\n        .pv-resumen-sistema-icono{width:31px;height:31px;border-radius:9px;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#FDF0D9;color:var(--pv-primary-dark)}\n        .pv-resumen-sistema-icono-ok{background:#dcfce7;color:#166534}\n        .pv-resumen-sistema-label{display:block;font-size:10px;color:var(--pv-muted);font-weight:700;text-transform:uppercase;letter-spacing:.02em}\n        .pv-resumen-sistema-valor{display:block;font-size:15px;font-weight:700;color:var(--pv-ink)}\n        .pv-resumen-sistema-valor-sm{display:block;font-size:12px;font-weight:700;color:var(--pv-ink)}\n        .pv-resumen-sistema-sub{display:block;font-size:10.5px;color:var(--pv-muted)}\n        @media (max-width:640px){ .pv-resumen-sistema-grid{grid-template-columns:1fr} }\n        .pv-comp-resumen-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:11px}\n        .pv-comp-resumen-box{background:#fff;border:1px solid var(--pv-border);border-radius:13px;padding:13px 14px;display:flex;flex-direction:column;justify-content:center;min-height:70px;box-sizing:border-box}\n        .pv-comp-resumen-box strong{font-size:16px;color:var(--pv-ink);margin-top:4px}\n        .pv-comp-resumen-box-primario{background:#FDF0D9;border-color:#F2D18A}\n        .pv-comp-resumen-box-primario strong{color:var(--pv-primary-dark);font-size:18px}\n        .pv-comp-resumen-box .pv-input-prefijo input{margin-top:0}\n        @media (max-width:920px){ .pv-comp-resumen-grid{grid-template-columns:repeat(3,1fr)} }\n        @media (max-width:560px){ .pv-comp-resumen-grid{grid-template-columns:repeat(2,1fr)} }\n        \/* Resumen de Cotizaci\u00f3n: 4 cuadros, TODOS del mismo tama\u00f1o siempre \u2014\n           a prop\u00f3sito su propia clase con exactamente 4 columnas iguales, en\n           vez de reusar .pv-comp-resumen-grid (esa es de 5 columnas, pensada\n           para el resumen de Comprobante; con solo 4 cajas ah\u00ed adentro\n           quedar\u00edan descuadradas, cada una angosta de m\u00e1s). *\/\n        .pv-cot-resumen-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:11px}\n        @media (max-width:560px){ .pv-cot-resumen-grid{grid-template-columns:repeat(2,1fr)} }\n        .pv-pedido-resumen-tarjeta{background:#fff;border:1px solid var(--pv-border);border-radius:13px;padding:14px 16px}\n        .pv-pedido-resumen-fila-chica{display:flex;justify-content:space-between;font-size:12px;color:var(--pv-muted);padding:3px 0}\n        .pv-pedido-resumen-total-box{background:#FDF0D9;border-radius:10px;padding:10px 12px;display:flex;justify-content:space-between;align-items:baseline;margin:8px 0}\n        .pv-pedido-resumen-total-box .pv-resumen-sistema-label{color:var(--pv-primary-dark)}\n        .pv-pedido-resumen-total-box strong{font-size:16px;color:var(--pv-primary-dark)}\n        .pv-pedido-resumen-anticipo-fila{display:flex;justify-content:space-between;align-items:center;gap:10px;border-top:1px solid var(--pv-border);padding-top:10px;margin-top:2px}\n        .pv-pedido-resumen-anticipo-fila .pv-input-prefijo{flex-shrink:0;width:110px}\n        .pv-pedido-resumen-anticipo-fila .pv-input-prefijo input{width:100%;box-sizing:border-box;padding-top:8px;padding-bottom:8px;text-align:right;border:1.5px solid var(--pv-border);border-radius:10px;font-size:13px;font-family:inherit;background:#f8fafc}\n        .pv-pedido-resumen-anticipo-fila .pv-input-prefijo input:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 3px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        .pv-pedido-resumen-fila-chica strong{color:var(--pv-ink);font-size:12.5px}\n        \/* overflow-x:auto ac\u00e1 para que, si una fila (ej. Historial de Pedidos\n           con varios \u00edconos de Acciones en una columna angosta) no entra en\n           el ancho de la tarjeta, el scroll quede CONTENIDO adentro de la\n           tarjeta \u2014 antes esto no exist\u00eda y el contenido se sal\u00eda visualmente\n           por fuera del borde blanco de la tarjeta hacia el fondo gris de la\n           p\u00e1gina, en vez de scrollear. *\/\n        .pv-historial-tabla{margin-top:9px;overflow-x:auto;-webkit-overflow-scrolling:touch}\n        .pv-historial-fila{display:grid;grid-template-columns:110px 140px 1fr 150px 90px;gap:11px;align-items:center;padding:11px 6px;border-bottom:1px solid var(--pv-border);font-size:12px}\n        .pv-historial-header{font-size:9.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--pv-muted);font-weight:700;border-bottom:2px solid var(--pv-border);padding-bottom:9px}\n        .pv-historial-acciones{display:flex;gap:6px;align-items:center;flex-wrap:nowrap}\n        .pv-icon-btn{width:29px;height:29px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;background:var(--pv-bg);color:var(--pv-ink);border:none;cursor:pointer;text-decoration:none;flex-shrink:0}\n        .pv-fab-nota-btn-activa{background:rgba(37,99,235,.12)!important;color:#2563EB!important}\n        .pv-icon-btn:hover{background:#e2edfb;color:var(--pv-ink)}\n        .pv-icon-btn-del{color:#dc2626}\n        .pv-icon-btn-del:hover{background:#fee2e2;color:#dc2626}\n        .pv-icon-btn-disabled{opacity:.35;cursor:not-allowed}\n        .pv-paginacion{display:flex;align-items:center;justify-content:center;gap:13px;margin-top:14px;padding-top:13px;border-top:1px solid var(--pv-border)}\n        .pv-paginacion-texto{font-size:11.5px;color:var(--pv-muted);font-weight:600}\n        .pv-icon-btn-label{width:auto;height:29px;padding:0 13px;font-size:11.5px;font-weight:700}\n        .pv-icon-btn-retencion{background:rgba(245,158,11,.14);color:var(--pv-warning-text)}\n        .pv-icon-btn-retencion:hover{background:rgba(245,158,11,.24);color:var(--pv-warning-text)}\n        .pv-file-input{display:flex;align-items:center;gap:9px;flex-wrap:wrap}\n        .pv-file-input-native{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;white-space:nowrap;border:0;clip:rect(0,0,0,0)}\n        .pv-file-input-btn{display:inline-flex;align-items:center;background:var(--pv-bg);color:var(--pv-ink);border:1.5px solid var(--pv-border);padding:8px 14px;border-radius:9px;font-size:12px;font-weight:700;cursor:pointer;white-space:nowrap}\n        .pv-file-input-btn:hover{background:#e2edfb}\n        .pv-file-input-nombre{font-size:11.5px;color:var(--pv-muted)}\n        .pv-color-picker{position:relative;display:inline-block}\n        .pv-color-picker-trigger{display:flex;align-items:center;gap:10px;background:#fff;border:1.5px solid var(--pv-border);border-radius:12px;padding:8px 14px;cursor:pointer;transition:border-color .12s,box-shadow .12s}\n        .pv-color-picker-trigger:hover{border-color:var(--pv-primary)}\n        .pv-color-picker-trigger.open{border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)}\n        .pv-color-picker-circulo{width:22px;height:22px;border-radius:50%;box-shadow:0 0 0 1px rgba(30,27,46,.08)}\n        .pv-color-picker-chevron{color:var(--pv-muted);font-size:11px}\n        .pv-color-picker-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:60;background:#fff;border:1px solid var(--pv-border);border-radius:14px;padding:12px;box-shadow:0 10px 30px rgba(30,27,46,.15);display:grid;grid-template-columns:repeat(5,1fr);gap:10px;width:210px}\n        .pv-color-picker-panel[hidden]{display:none}\n        .pv-color-swatch{width:30px;height:30px;border-radius:50%;border:2px solid transparent;cursor:pointer;padding:0}\n        .pv-color-swatch:hover{transform:scale(1.08)}\n        .pv-color-swatch.active{border-color:var(--pv-ink);box-shadow:0 0 0 2px #fff inset}\n        .pv-enviar-inline form{display:flex;gap:6px;align-items:center;margin:0;flex-wrap:wrap}\n        .pv-enviar-inline input[type=email]{flex:1 1 140px;min-width:0;padding:7px 11px;border:1.5px solid var(--pv-border);border-radius:9px;font-size:11.5px;font-family:inherit;box-sizing:border-box}\n        .pv-enviar-inline input[type=email]:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)}\n        .pv-enviar-inline .pvf-btn{padding:8px 14px;font-size:11.5px;flex-shrink:0}\n        @media (max-width:820px){\n            \/* Antes: cada .pv-historial-fila quedaba como una fila plana m\u00e1s\n               dentro de la lista (solo una l\u00ednea divisoria fina), as\u00ed que en\n               m\u00f3vil se ve\u00eda como un muro de texto sin l\u00edmites claros entre\n               un pedido\/movimiento y el siguiente. Ahora cada fila es su\n               propia tarjeta (fondo, borde, sombra, radio) igual que\n               .rv-prov-card, y sus campos van en pares etiqueta\/valor uno\n               al lado del otro en vez de apilados uno debajo del otro \u2014\n               reduce la altura a la mitad y se ve dise\u00f1ado, no una lista. *\/\n            .pv-historial-fila{grid-template-columns:1fr!important;gap:0;background:#fff;border:1px solid var(--pv-border);border-radius:16px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 20px rgba(16,24,40,.05);padding:6px 14px!important;margin-bottom:10px}\n            .pv-historial-header{display:none}\n            .pv-historial-fila:not(.pv-historial-header) > div{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--pv-border);text-align:right}\n            .pv-historial-fila:not(.pv-historial-header) > div:last-child{border-bottom:none}\n            .pv-historial-fila:not(.pv-historial-header) > div::before{content:attr(data-label);display:block;font-size:10px;text-transform:uppercase;color:var(--pv-muted);font-weight:700;letter-spacing:.03em;text-align:left;flex-shrink:0}\n            \/* .rv-prov-card tambi\u00e9n trae la clase pv-historial-fila (para\n               reusar el clic-completo de tarjeta), pero su dise\u00f1o es propio\n               (avatar+nombre+insignia arriba, saldo\/fecha abajo) \u2014 nada que\n               ver con el gen\u00e9rico \"columnas de tabla -> pares etiqueta\/valor\"\n               de arriba. Sin este escape, ese !important de padding lo\n               aplastaba y la regla > div le met\u00eda un borde y etiquetas\n               fantasma (content:attr(data-label) vac\u00edo) a sus dos \u00fanicos\n               hijos, empujando todo el texto a la derecha. Mismo patr\u00f3n que\n               .rv-cxp-card.pv-historial-fila m\u00e1s abajo en este archivo. *\/\n            .rv-prov-card.pv-historial-fila{padding:20px!important}\n            .pv-historial-fila:not(.pv-historial-header) > .rv-prov-card-top{padding:0;border-bottom:none;text-align:left;width:100%}\n            .pv-historial-fila:not(.pv-historial-header) > .rv-prov-card-foot{padding:12px 0 0;border-bottom:none;text-align:left;width:100%}\n            .pv-historial-fila:not(.pv-historial-header) > .rv-prov-card-top::before,\n            .pv-historial-fila:not(.pv-historial-header) > .rv-prov-card-foot::before{content:none}\n            \/* \"Saldo\" y \"\u00daltima compra\" quedaban apretados hacia el centro de\n               la tarjeta en vez de pegados a sus bordes \u2014 margin:auto en el\n               lado libre de cada bloque es m\u00e1s contundente que fiarse solo\n               de justify-content:space-between (que ac\u00e1 compet\u00eda con el\n               gap:10px heredado de la regla gen\u00e9rica de arriba). *\/\n            .rv-prov-card-foot > div:first-child{margin-right:auto}\n            .rv-prov-card-foot-der{margin-left:auto}\n            \/* Cada fila de .pv-table\/.pvf-table se convierte en su propia\n               tarjeta apilada (mismo lenguaje visual que .pvf-card) en vez\n               de forzar scroll horizontal \u2014 pv_table_mobile_labels_script()\n               (02-helpers.php) copia el texto de cada <th> a un atributo\n               data-label en el <td> de su columna, que aqu\u00ed se pinta como\n               etiqueta chica encima del valor. *\/\n            .pv-table,.pvf-table{display:block;border-collapse:separate}\n            .pv-table thead,.pvf-table thead{display:none}\n            .pv-table tbody,.pvf-table tbody{display:block}\n            .pv-table tr,.pvf-table tr{display:block;background:#fff;border:1px solid var(--pv-border);border-radius:18px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 20px rgba(16,24,40,.05);padding:14px 16px;margin-bottom:12px;white-space:normal}\n            .pv-table tr:has(th),.pvf-table tr:has(th){display:none}\n            .pv-table th,.pvf-table th{display:none}\n            .pv-table td,.pvf-table td{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:9px 0;border-bottom:1px solid var(--pv-border);font-size:13px;text-align:right;white-space:normal}\n            .pv-table td:last-child,.pvf-table td:last-child{border-bottom:none;padding-bottom:0}\n            \/* La primera celda de cada fila hace de \"t\u00edtulo\" de la tarjeta\n               (como el nombre en .rv-prov-card) \u2014 sin la etiqueta chica\n               encima, en negrita y alineada a la izquierda \u2014 en vez de\n               tratarse como un par etiqueta\/valor m\u00e1s. *\/\n            .pv-table td:first-of-type,.pvf-table td:first-of-type{font-weight:700;font-size:14.5px;color:var(--pv-ink);padding-top:0;text-align:left;justify-content:flex-start}\n            .pv-table td:first-of-type::before,.pvf-table td:first-of-type::before{content:none!important}\n            .pv-table td[data-label]::before,.pvf-table td[data-label]::before{content:attr(data-label);font-weight:700;color:var(--pv-muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.03em;text-align:left;flex-shrink:0}\n            .pv-table td[colspan],.pvf-table td[colspan]{text-align:left;color:var(--pv-muted);font-weight:400;font-size:13px}\n            \/* El \u00edcono de cada tarjeta KPI (rv-kpi-card) queda arriba a la\n               derecha por dise\u00f1o de escritorio \u2014 en pantallas angostas se\n               ve como si \"flotara\" fuera de la tarjeta porque el borde de\n               la tarjeta es casi del mismo color que el fondo. Bajarlo\n               junto a la etiqueta (en vez de esquina opuesta) lo ata\n               visualmente al resto de la tarjeta. *\/\n            .rv-kpi-card-top{flex-wrap:nowrap;gap:10px}\n            .rv-kpi-card{border:1.5px solid var(--pv-border2)}\n            \/* La franja de divisas se repite en varios lugares (encabezado\n               global, Ficha de Proveedor, Bancos, Gastos, selector \"Divisa\"\n               en Nuevo Pedido) \u2014 misma clase .pv-moneda-switches en todos,\n               as\u00ed que este ajuste compacto para m\u00f3vil se aplica sin\n               restringirlo al encabezado, para que se vea igual de chico y\n               consistente en cualquier m\u00f3dulo donde aparezca. *\/\n            .pv-moneda-switches{gap:2px;padding:3px}\n            .pv-moneda-switch{padding:6px 10px!important}\n            .pv-moneda-switch-label{font-size:11.5px!important}\n            .pv-moneda-switch.active{background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2))!important;box-shadow:0 4px 12px rgba(201,121,10,.3)}\n            .pv-moneda-switch.active .pv-moneda-switch-label{color:#fff!important}\n        }\n        \/* overflow-x:auto SIN overflow-y expl\u00edcito hace que el navegador\n           convierta autom\u00e1ticamente el otro eje tambi\u00e9n a \"auto\" (regla real\n           de la spec de CSS) \u2014 sin esta l\u00ednea aparec\u00edan DOS barras de scroll\n           (horizontal Y vertical) alrededor de las pesta\u00f1as, aunque el\n           contenido entrara perfecto, con tema de scrollbar cl\u00e1sico de\n           Windows. Bug viejo, no de esta ronda, pero se vio al pasar. *\/\n        \/* Sin scrollbar-width\/::-webkit-scrollbar: la barra de scroll nativa\n           gris se ve\u00eda fea encima de las pesta\u00f1as \u2014 se sigue pudiendo\n           deslizar igual, solo se esconde el indicador nativo del sistema\n           operativo\/navegador (no cambia layout, es puramente cosm\u00e9tico,\n           seguro en cualquier tama\u00f1o de pantalla). *\/\n        .pv-subtabs{display:flex;gap:23px;margin:-4px 0 16px;border-bottom:1px solid var(--pv-border);overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none}\n        .pv-subtabs::-webkit-scrollbar{display:none}\n        .pv-subtab{padding:0 0 11px;font-size:13px;font-weight:600;color:var(--pv-ink);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;flex-shrink:0}\n        .pv-subtab:hover{color:var(--pv-primary)}\n        .pv-subtab.active{color:var(--pv-primary);border-color:var(--pv-primary)}\n        \/* Aviso \"Desliza \u2192\" debajo de la barra de sub-pesta\u00f1as de Inventario\n           (Productos\/Categor\u00edas\/Almacenes\/Movimientos\/Alertas\/Servicios\/\n           Canales de venta \u2014 7 \u00edtems, se salen en un tel\u00e9fono). Un intento\n           anterior lo puso como ::after DENTRO de .pv-subtabs con\n           position:absolute \u2014 no serv\u00eda: .pv-subtabs tiene overflow-x:auto\n           (que de paso vuelve el eje Y \"hidden\" tambi\u00e9n, ver comentario m\u00e1s\n           arriba en este archivo), as\u00ed que cualquier hijo posicionado fuera\n           de su propia caja (bottom negativo) queda recortado por ese\n           overflow y nunca se ve, aunque el CSS est\u00e9 bien escrito. Por eso\n           esto es un HERMANO real despu\u00e9s de <\/div> (echo aparte en\n           pv_tabs_inventario_html(), 18-modulo-inventario.php) \u2014 nunca lo\n           toca el overflow del padre. Oculto en escritorio a prop\u00f3sito. *\/\n        .pv-inv-tabs-hint{display:none}\n        @media (max-width:820px){\n            .pv-inv-tabs-hint{\n                display:block;\n                text-align:right;\n                margin:-10px 0 14px;\n                font-size:10px;\n                font-weight:700;\n                color:var(--pv-primary);\n                letter-spacing:.02em;\n                animation:pv-subtabs-arrow 1.3s ease-in-out infinite;\n            }\n            @keyframes pv-subtabs-arrow{\n                0%,100%{transform:translateX(0)}\n                50%{transform:translateX(4px)}\n            }\n            \/* \"+ Movimiento\"\/\"\u2193 Ingreso a inventario\"\/\"+ Nuevo producto\":\n               BIEN CENTRADOS y ocupando la fila COMPLETA \u2014 la fila\n               (.rv-inv-acciones-row) crece con flex:1 para llenar todo el\n               ancho disponible (se oculta el <span> vac\u00edo de la izquierda\n               que en escritorio la empuja a la derecha, para que tenga todo\n               el ancho de la tarjeta), y cada bot\u00f3n toma flex:1 en partes\n               iguales adentro con el texto centrado \u2014 quedan repartidos a\n               lo ancho de punta a punta, ni pegados a un lado ni con hueco\n               suelto. Mismo breakpoint (820px) que el aviso \"Desliza \u2192\" de\n               arriba (antes viv\u00eda en un @media(max-width:680px) aparte, y\n               en el rango 680-820px no aplicaba nada todav\u00eda \u2014 se ve\u00edan\n               pegados a la derecha con ancho natural de escritorio).\n               !important en accion-txt-corta: sin \u00e9l, pierde contra la\n               regla base \"display:none\" de m\u00e1s arriba en este archivo \u2014 las\n               dos tienen la misma especificidad (una sola clase) y la base\n               est\u00e1 escrita DESPU\u00c9S en el archivo, as\u00ed que ganaba ella y el\n               texto corto (\"+ Mov.\"\/etc.) desaparec\u00eda por completo (botones\n               vac\u00edos, bug real de una vuelta anterior de este ajuste). *\/\n            .rv-inv-toolbar-row>span:first-child{display:none}\n            .rv-inv-accion-txt-larga{display:none}\n            .rv-inv-accion-txt-corta{display:inline!important}\n            .rv-inv-acciones-row{flex:1;flex-wrap:nowrap!important;gap:6px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}\n            .rv-inv-acciones-row::-webkit-scrollbar{display:none}\n            .rv-inv-acciones-row .pvf-btn{flex:1;white-space:nowrap;padding:7px 8px!important;font-size:11px!important;text-align:center}\n        }\n        .pv-historial-toolbar{display:flex;justify-content:space-between;align-items:center;gap:11px;flex-wrap:wrap;margin-bottom:6px}\n        .pv-historial-buscar-input{padding:8px 14px;border:1.5px solid var(--pv-border);border-radius:999px;font-size:12px;min-width:200px;background:#f8fafc;font-family:inherit;box-sizing:border-box}\n        .pv-historial-buscar-input:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        \/* .pv-money nunca tuvo estilo propio \u2014 solo era un gancho para el\n           formateo autom\u00e1tico de pv_money_mask_script(), as\u00ed que sal\u00eda con\n           el input feo por defecto del navegador en cualquier tabla donde\n           se usara (ej. precios por canal). *\/\n        .pv-money{padding:9px 12px;border:1.5px solid var(--pv-border2);border-radius:11px;font-size:13px;font-weight:600;font-family:inherit;background:#F3F4F9;color:var(--pv-ink);box-sizing:border-box;transition:border-color .15s,box-shadow .15s,background .15s}\n        .pv-money:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        html body .pv-wrap .pv-money,html body .pvf-shell .pv-money,html body .pv-modal-box .pv-money{border:1.5px solid var(--pv-border2)!important;border-radius:11px!important;padding:9px 12px!important;background-color:#F3F4F9!important;font-weight:600!important;box-shadow:none!important}\n        html body .pv-wrap .pv-money:focus,html body .pvf-shell .pv-money:focus,html body .pv-modal-box .pv-money:focus{border-color:var(--pv-primary)!important;background-color:#fff!important;box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)!important}\n        .pv-resumen-lista{display:flex;flex-direction:column;gap:2px;margin-top:9px}\n        .pv-resumen-fila{display:flex;justify-content:space-between;align-items:flex-start;gap:9px;font-size:11.5px;padding:8px 0;border-bottom:1px solid var(--pv-border)}\n        .pv-resumen-fila span:first-child{color:var(--pv-muted);font-weight:600;flex-shrink:0}\n        .pv-resumen-fila span:last-child{color:var(--pv-ink);font-weight:700;text-align:right;word-break:break-word}\n        \/* La descripci\u00f3n autogenerada de una Cuenta por Cobrar (con el\n           detalle del pedido\/comprobante) es mucho m\u00e1s larga que las\n           etiquetas cortas normales de .pv-resumen-fila \u2014 si el primer span\n           no puede encogerse, empuja el monto a un espacio casi nulo y el\n           n\u00famero se parte car\u00e1cter por car\u00e1cter. Aqu\u00ed s\u00ed se deja encoger. *\/\n        .pv-resumen-fila-cobrar span:first-child{flex-shrink:1;min-width:0;overflow-wrap:break-word;flex:1}\n        .pv-resumen-fila-cobrar span:last-child{flex-shrink:0;white-space:nowrap}\n        .pv-resumen-nota{font-size:10px;color:var(--pv-muted);margin:11px 0 0}\n        .pv-dash-welcome{margin-bottom:16px}\n        .pv-saldos-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:13px;margin-top:13px}\n        .pv-saldo-card{background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:13px;padding:14px}\n        .pv-saldo-nombre{display:block;font-weight:700;color:var(--pv-ink);text-decoration:none;font-size:13px;margin-bottom:7px}\n        .pv-saldo-nombre:hover{color:var(--pv-primary)}\n        .pv-saldo-monto{font-size:13px}\n        .pv-bancos-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:13px}\n        .pv-banco-card{display:flex;flex-direction:column;border-left:3px solid #0d9488}\n        .pv-banco-card-top{display:flex;align-items:center;gap:8px;margin-bottom:7px}\n        .pv-banco-card-top strong{font-size:13.5px;color:var(--pv-ink);font-weight:700}\n        .pv-banco-icono{width:27px;height:27px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;background:#ccfbf1;color:#0f766e}\n        .pv-banco-icono svg{width:13px;height:13px}\n        .pv-banco-saldo{font-size:15px;font-weight:700;color:var(--pv-ink)}\n        .pv-banco-metodos{background:var(--pv-bg);border-radius:10px;padding:10px;margin-top:11px}\n        .pv-banco-metodos .pv-pill{margin:0 6px 6px 0}\n        .pv-kpi-trend{font-size:10.5px;font-weight:700}\n        .pv-kpi-trend.up{color:#16a34a}\n        .pv-kpi-trend.down{color:#dc2626}\n        .pv-reporte-resumen{display:flex;align-items:stretch;flex-wrap:wrap}\n        .pv-reporte-resumen-item{display:flex;gap:11px;align-items:center;padding:10px 22px;flex:1;min-width:150px}\n        .pv-reporte-resumen-item+.pv-reporte-resumen-item{border-left:1px solid var(--pv-border)}\n        @media (max-width:900px){ .pv-reporte-resumen-item+.pv-reporte-resumen-item{border-left:none;border-top:1px solid var(--pv-border)} }\n        .pv-reporte-resumen-icono{width:40px;height:40px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center}\n        .pv-reporte-resumen-label{font-size:11px;color:var(--pv-muted);font-weight:700;margin-bottom:2px}\n        .pv-reporte-resumen-valor{font-size:18px;font-weight:800;color:var(--pv-ink);line-height:1.2}\n        .pv-reporte-resumen-sub{font-size:10.5px;color:var(--pv-muted)}\n        .pv-reporte-resumen-chart-item{flex:1.4;min-width:190px}\n        .pv-reporte-chart-wrap{position:relative;height:52px;margin-top:4px}\n        .pv-reporte-ic-indigo{background:#FDF0D9;color:#C9790A}\n        .pv-reporte-ic-verde{background:#d1fae5;color:#059669}\n        .pv-reporte-ic-amber{background:#fef3c7;color:#b45309}\n        .pv-reporte-vista-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin:22px 0 4px}\n        .pv-reporte-badge{background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:999px;padding:5px 12px;font-size:11px;font-weight:700;color:var(--pv-muted)}\n        .pv-reporte-tabla-header{display:flex;align-items:center;gap:10px}\n        .pv-reporte-tabla-icono{width:34px;height:34px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center}\n        .pv-reporte-total-row{display:flex;justify-content:space-between;padding:11px 9px 4px;font-size:12.5px;font-weight:700;color:var(--pv-ink);border-top:2px solid var(--pv-border);margin-top:2px}\n\n        \/* ===== Historial de Pedidos \u2014 tarjeta de m\u00f3vil (boceto aprobado\n           2026-07-15, mismo lenguaje que Producto\/Movimiento\/Servicio) =====\n           Estado+Fecha arriba, Cliente como t\u00edtulo (N\u00famero como subt\u00edtulo \u2014\n           al rev\u00e9s de Productos, ac\u00e1 el nombre importa m\u00e1s que el c\u00f3digo),\n           Total\/Pagado en una franja de 2 columnas, Acciones al pie (hasta\n           5 \u00edconos seg\u00fan el estado del pedido \u2014 Editar\/Despachar\/Devoluci\u00f3n\/\n           Ver recibo\/Enviar\/Eliminar \u2014 se acomodan en fila con salto de\n           l\u00ednea si no caben todos). Reordena SOLO con CSS Grid areas, sin\n           tocar el HTML ni el grid-template-columns de escritorio. *\/\n        .rv-ped-total-etiqueta{display:none}\n        @media (max-width:680px){\n            #pv-hist-pedidos-card{background:transparent;border:none;box-shadow:none;padding:0}\n            \/* Buscador + \"Todos los estados\" en la MISMA fila \u2014 antes el\n               buscador ten\u00eda flex:1 1 220px (un m\u00ednimo demasiado ancho para\n               un tel\u00e9fono) as\u00ed que el bot\u00f3n de estado nunca cab\u00eda al lado y\n               se ca\u00eda a su propia l\u00ednea. Se encoge el buscador y el bot\u00f3n\n               de estado se acorta (texto con elipsis) para que siempre\n               entren los dos juntos. *\/\n            #pv-hist-pedidos-card .pv-historial-toolbar{flex-wrap:nowrap!important;gap:8px!important}\n            #pv-hist-pedidos-card .pv-historial-buscar-input{flex:1 1 auto!important;min-width:0!important}\n            #pv-hist-pedidos-card #pv-hist-filtro-estado-form{flex-shrink:0!important}\n            #pv-hist-pedidos-card .pv-combo-trigger{padding:9px 10px!important;font-size:11.5px!important;min-width:0!important}\n            #pv-hist-pedidos-card .pv-combo-trigger-label{max-width:78px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n            .rv-ped-table-row.pv-historial-header{display:none!important}\n            .rv-ped-table-row{\n                display:grid!important;\n                grid-template-columns:repeat(2,minmax(0,1fr))!important;\n                grid-template-areas:\n                    \"estado fecha\"\n                    \"cliente cliente\"\n                    \"numero numero\"\n                    \"total pagado\"\n                    \"acciones acciones\"!important;\n                row-gap:7px!important;column-gap:8px!important;\n                padding:14px 14px 12px!important;\n                border:1px solid var(--pv-border)!important;\n                border-radius:16px!important;\n                margin-bottom:10px!important;\n                background:#fff;\n                box-shadow:0 1px 2px rgba(16,24,40,.03),0 8px 20px rgba(16,24,40,.05);\n            }\n            .rv-ped-table-row>div{padding:0!important;border-bottom:none!important;justify-content:flex-start!important;text-align:left!important}\n            .rv-ped-table-row>div::before{content:none!important}\n            .rv-ped-table-row>div[data-label=\"Estado\"]{grid-area:estado;justify-self:start}\n            .rv-ped-table-row>div[data-label=\"Fecha\"]{grid-area:fecha;justify-self:end;font-size:10.5px;font-weight:600;color:var(--pv-muted);font-variant-numeric:tabular-nums}\n            .rv-ped-table-row>div[data-label=\"Cliente\"]{grid-area:cliente;font-size:14.5px;font-weight:700;color:var(--pv-ink);line-height:1.3}\n            .rv-ped-table-row>div[data-label=\"N\u00famero\"]{grid-area:numero;margin-top:-4px;font-size:11px;color:var(--pv-muted);font-variant-numeric:tabular-nums}\n            .rv-ped-table-row>div[data-label=\"N\u00famero\"] strong{font-weight:600}\n            .rv-ped-table-row>div[data-label=\"Total\"],\n            .rv-ped-table-row>div[data-label=\"Pagado\"]{\n                display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;\n                min-width:0;gap:3px;background:var(--pv-bg);padding:8px 4px!important;text-align:center!important;font-size:12.5px;font-weight:800;color:var(--pv-ink);overflow-wrap:break-word\n            }\n            .rv-ped-table-row>div[data-label=\"Total\"]{grid-area:total;border-radius:10px 0 0 10px;border-right:1px solid var(--pv-border);color:var(--pv-primary-dark)}\n            .rv-ped-table-row>div[data-label=\"Pagado\"]{grid-area:pagado;border-radius:0 10px 10px 0}\n            .rv-ped-table-row>div[data-label=\"Pagado\"]::before{\n                content:attr(data-label)!important;font-size:8.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--pv-muted)\n            }\n            \/* \"TOTAL USD\"\/\"TOTAL COP\": HTML real (no ::before), mismo motivo\n               y mismo bug ya resuelto que en Inventario \u2192 Productos\n               (.rv-inv-precio-etiqueta): la divisa necesita SU PROPIO color\n               \u00e1mbar, un pseudo-elemento no puede pintar la mitad de otro\n               color, y el uppercase necesita !important porque\n               \".pvf-shell *{text-transform:lowercase!important}\" le gana a\n               un uppercase sin !important en HTML real (a diferencia de\n               ::before, que esa regla global no toca). El badge de divisa\n               viejo (pv_moneda_badge, pegado al monto) se apaga porque\n               ahora es redundante con la etiqueta de arriba. *\/\n            .rv-ped-total-etiqueta{display:block!important;font-size:8.5px;font-weight:800;text-transform:uppercase!important;letter-spacing:.03em;color:var(--pv-muted);margin-bottom:1px}\n            .rv-ped-total-moneda{color:var(--pv-primary);text-transform:uppercase!important}\n            .rv-ped-table-row>div[data-label=\"Total\"] .pv-moneda-badge{display:none}\n            .rv-ped-table-row>div[data-label=\"Acciones\"]{grid-area:acciones;display:flex!important;flex-wrap:wrap;justify-content:flex-end!important;align-items:center!important;gap:6px;padding-top:9px!important;border-top:1px solid var(--pv-border)!important;margin-top:2px}\n        }\n\n        \/* ===== \"Precio de venta por canal\" \u2014 tarjeta de m\u00f3vil (boceto\n           aprobado 2026-07-15) =====\n           A diferencia de Producto\/Movimiento\/Pedido\/Servicio, esta tabla\n           tiene un n\u00famero DIN\u00c1MICO de columnas (una por cada canal de venta\n           que el usuario haya creado), as\u00ed que no se puede armar un\n           grid-template-areas fijo como en esas otras. En vez de eso, se\n           reusa el sistema GEN\u00c9RICO de .pv-historial-fila (el mismo que\n           convierte cualquier tabla en tarjetas con label:valor, ya activo\n           desde @media 820px m\u00e1s arriba en este archivo) \u2014 la \u00fanica\n           diferencia real de esta tabla es que antes NUNCA tuvo\n           data-label en sus celdas (ni el nombre del producto ni cada\n           canal), as\u00ed que en m\u00f3vil los precios aparec\u00edan sin decir de qu\u00e9\n           canal eran. Con los data-label agregados en PHP, el sistema\n           gen\u00e9rico ya alcanza para mostrarlos bien \u2014 ac\u00e1 solo se afina el\n           primer campo (nombre del producto) para que se vea como t\u00edtulo\n           de tarjeta en vez de una fila m\u00e1s \"PRODUCTOS: nombre\". *\/\n        @media (max-width:680px){\n            #pv-precios-canal-card{background:transparent;border:none;box-shadow:none;padding:0}\n            .rv-canal-table-row.pv-historial-header{display:none!important}\n            .rv-canal-table-row{\n                display:block!important;\n                padding:14px 16px 12px!important;\n                border:1px solid var(--pv-border)!important;\n                border-radius:16px!important;\n                margin-bottom:10px!important;\n                background:#fff;\n                box-shadow:0 1px 2px rgba(16,24,40,.03),0 8px 20px rgba(16,24,40,.05);\n            }\n            .rv-canal-table-row>div{padding:8px 0!important}\n            \/* Nombre del producto: t\u00edtulo, sin el r\u00f3tulo \"PRODUCTOS\" delante\n               y con su propia l\u00ednea divisoria (separa el t\u00edtulo del resto\n               de los canales, que s\u00ed siguen mostrando label:valor). *\/\n            .rv-canal-table-row>div[data-label=\"Productos\"]{font-size:14.5px;font-weight:700;color:var(--pv-ink);padding:0 0 10px!important;margin-bottom:2px;border-bottom:2px solid var(--pv-border)!important}\n            .rv-canal-table-row>div[data-label=\"Productos\"]::before{content:none!important}\n            \/* Nombre del canal (Detal\/Mercado libre\/Por mayor\/\u2026): texto\n               normal en vez del r\u00f3tulo chico gris may\u00fascula que usa el\n               sistema gen\u00e9rico por defecto \u2014 ac\u00e1 el nombre del canal ES el\n               dato principal de la fila, no una etiqueta secundaria. *\/\n            .rv-canal-table-row>div:not([data-label=\"Productos\"])::before{font-size:12.5px!important;font-weight:600!important;text-transform:none!important;letter-spacing:0!important;color:var(--pv-ink)!important}\n            .rv-canal-table-row .pv-money{max-width:110px!important}\n        }\n\n        \/* ===== M\u00f3dulo Gastos \u2014 resumen premium (adaptado a la paleta del sistema) ===== *\/\n        .rv-gastos-resumen{display:grid;grid-template-columns:repeat(3,minmax(0,1fr)) 1.35fr;gap:16px;margin:0 0 18px}\n        .rv-gasto-kpi,.rv-gasto-chart-card{background:#fff;border:1px solid var(--pv-border);border-radius:18px;box-shadow:0 10px 26px rgba(30,27,46,.05);padding:20px;position:relative;overflow:hidden}\n        .rv-gasto-kpi{min-height:170px;border-top:2px solid #f59e0b}\n        .rv-gasto-kpi::after{content:\"\";position:absolute;right:20px;bottom:18px;width:110px;height:52px;background:repeating-linear-gradient(135deg,rgba(245,158,11,.28) 0 12px,transparent 12px 28px);opacity:.75}\n        .rv-kpi-icon{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,#fbbf24,#f59e0b);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 10px 20px rgba(245,158,11,.22);margin-bottom:16px}\n        .rv-gasto-kpi span{display:block;font-size:12.5px;font-weight:700;color:var(--pv-muted);margin-bottom:6px}\n        .rv-gasto-kpi strong{display:block;font-size:26px;line-height:1;font-weight:800;color:var(--pv-ink);letter-spacing:-.02em}\n        .rv-gasto-kpi strong small{font-size:11px;color:var(--pv-primary);background:#eef0ff;padding:3px 7px;border-radius:999px;letter-spacing:0;vertical-align:middle;font-weight:700}\n        .rv-gasto-kpi p{margin:12px 0 0;display:inline-flex;background:var(--pv-bg);color:var(--pv-muted);padding:5px 10px;border-radius:999px;font-size:11px;font-weight:700}\n        .rv-gasto-chart-card{min-height:170px}\n        .rv-chart-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}\n        .rv-chart-head h3{margin:0;font-size:14px;font-weight:800;color:var(--pv-ink)}\n        .rv-chart-head span{color:var(--pv-muted);font-size:14px;cursor:default}\n        .rv-chart-content{display:grid;grid-template-columns:96px 1fr;gap:18px;align-items:center}\n        .rv-donut-empty{width:92px;height:92px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center}\n        .rv-donut-empty strong{font-size:15px;font-weight:800;color:var(--pv-ink);line-height:1}\n        .rv-donut-empty small{margin-top:4px;font-size:10px;font-weight:700;color:var(--pv-muted)}\n        .rv-chart-legend{font-size:12px;color:var(--pv-muted)}\n        .rv-chart-legend p{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:7px 0}\n        .rv-chart-legend p span{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:6px;flex-shrink:0}\n        .rv-chart-legend p b{color:var(--pv-ink);font-weight:700}\n        .rv-chart-legend hr{border:0;border-top:1px solid var(--pv-border);margin:10px 0}\n        .rv-chart-legend>strong{display:flex;justify-content:space-between;color:var(--pv-ink);font-size:12.5px;font-weight:800}\n        .pv-tab-label svg{width:13px;height:13px;vertical-align:-2px;margin-right:4px}\n        .rv-empty-state{min-height:220px;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;color:var(--pv-muted);padding:30px 20px}\n        .rv-empty-state-icon{width:64px;height:64px;border-radius:20px;background:linear-gradient(135deg,#FDF0D9,#fff);border:1px solid #F2D18A;color:var(--pv-primary);display:flex;align-items:center;justify-content:center;margin-bottom:14px}\n        .rv-empty-state strong{color:var(--pv-ink);font-size:14px;font-weight:800;margin-bottom:5px}\n        .rv-empty-state p{margin:0;font-size:12px;color:var(--pv-muted)}\n        @media (max-width:1280px){ .rv-gastos-resumen{grid-template-columns:repeat(2,minmax(0,1fr))} .rv-gasto-chart-card{grid-column:span 2} }\n        @media (max-width:760px){ .rv-gastos-resumen{grid-template-columns:1fr;gap:12px} .rv-gasto-chart-card{grid-column:span 1} .rv-chart-content{grid-template-columns:1fr;justify-items:center} }\n\n        \/* ===== M\u00f3dulo Inventario \u2014 dashboard premium (tama\u00f1o reducido ~20%) ===== *\/\n        .rv-inv-dashboard{width:100%}\n        .rv-inv-kpis{display:grid;grid-template-columns:1.05fr 1.05fr .9fr .9fr .9fr;gap:13px;margin:0 0 14px}\n        .rv-inv-kpi{min-height:80px;background:#fff;border:1px solid var(--pv-border);border-radius:14px;padding:14px 16px;box-shadow:0 10px 26px rgba(30,27,46,.05);display:flex;justify-content:space-between;gap:10px;align-items:center}\n        .rv-inv-kpi span{display:block;font-size:10px;font-weight:700;color:var(--pv-muted);margin-bottom:6px}\n        .rv-inv-kpi strong{display:block;font-size:18px;line-height:1;font-weight:800;color:var(--pv-ink);letter-spacing:-.03em}\n        .rv-inv-kpi strong small{font-size:8.5px;font-weight:800;letter-spacing:0}\n        .rv-inv-kpi p{margin:7px 0 0;color:var(--pv-muted);font-size:9px;font-weight:700}\n        .rv-inv-alert-number{color:#ff6b00!important}\n        .rv-inv-icon{width:37px;height:37px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex:0 0 auto}\n        .rv-inv-icon svg{width:15px;height:15px}\n        .rv-inv-icon.purple{background:#efecff;color:#5b45f3}\n        .rv-inv-icon.green{background:#dcfce7;color:#16a34a}\n        .rv-inv-icon.orange{background:#ffedd5;color:#f97316}\n        .rv-inv-filter-card{background:#fff;border:1px solid var(--pv-border);border-radius:14px;padding:13px 16px;box-shadow:0 10px 26px rgba(30,27,46,.04);display:grid;grid-template-columns:1fr minmax(176px,256px);gap:11px;align-items:end;margin-bottom:14px}\n        \/* Filtro de Almac\u00e9n de Alertas de Stock \u2014 a prop\u00f3sito NO usa las\n           clases de arriba (esas dependen del checkbox de la barra de\n           b\u00fasqueda de Productos, que esta pantalla no tiene); siempre\n           visible, tanto en escritorio como en m\u00f3vil. *\/\n        .rv-alerta-filtro-bar{background:#fff;border:1px solid var(--pv-border);border-radius:14px;padding:11px 14px;box-shadow:0 10px 26px rgba(30,27,46,.04)}\n        .rv-alerta-filtro-form{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\n        .rv-alerta-filtro-label{font-size:11px;font-weight:700;color:var(--pv-muted);white-space:nowrap}\n        .rv-alerta-filtro-select{min-width:180px;max-width:100%;height:36px;padding:0 11px;border:1.5px solid var(--pv-border)!important;border-radius:10px!important;font-size:12.5px!important;background:#f8fafc!important;color:var(--pv-ink)}\n        .rv-alerta-filtro-limpiar{font-size:11px;font-weight:700;color:var(--pv-primary-dark);text-decoration:none;margin-left:auto}\n        @media (max-width:640px){ .rv-alerta-filtro-select{min-width:0;flex:1 1 auto} }\n        \/* T\u00edtulo \"Filtros\"\/\"Limpiar\" y la etiqueta de cada campo (Almac\u00e9n\/\n           Categor\u00eda\/Estado) son SOLO para el panel flotante de m\u00f3vil \u2014 en\n           escritorio los 3 selects van siempre visibles en fila sin r\u00f3tulo\n           propio (el texto de la primera opci\u00f3n, \"Todos los almacenes\",\n           ya hace de r\u00f3tulo ah\u00ed), as\u00ed que ac\u00e1 quedan ocultos por defecto. *\/\n        .rv-inv-filter-panel-head{display:none}\n        .rv-inv-filter-label{display:none}\n        \/* R\u00f3tulo \"Precio COP\"\/\"Precio USD\" de la tarjeta de producto \u2014 solo\n           para el dise\u00f1o de tarjeta de m\u00f3vil (ver @media de abajo); en\n           escritorio la tabla ya tiene su propia columna \"Precio\" en el\n           encabezado, este texto quedar\u00eda repetido. *\/\n        .rv-inv-precio-etiqueta{display:none}\n        .rv-inv-currency-group{display:flex;gap:6px}\n        .rv-inv-currency{min-width:38px;height:26px;border-radius:8px;border:1px solid var(--pv-border);background:var(--pv-bg);color:var(--pv-muted);display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;text-decoration:none!important}\n        .rv-inv-currency.active{background:linear-gradient(135deg,var(--pv-primary),var(--pv-primary2));color:#fff;border-color:transparent;box-shadow:0 8px 16px rgba(var(--pv-primary-rgb),.2)}\n        .rv-inv-filter-form{display:grid;grid-template-columns:repeat(3,minmax(120px,1fr));gap:8px}\n        \/* display:contents en escritorio: cada campo \"desaparece\" como caja\n           y su <select> pasa a ser hijo directo de .rv-inv-filter-form (la\n           etiqueta de arriba ya est\u00e1 oculta) \u2014 el grid de 3 columnas de\n           escritorio sigue viendo exactamente 3 <select>, ni m\u00e1s ni menos,\n           mismo resultado visual que si no existiera este wrapper. Se\n           convierte en una fila real (label + select apilados) solo dentro\n           del panel flotante de m\u00f3vil, ver @media de abajo. *\/\n        .rv-inv-filter-field{display:contents}\n        \/* display:contents en escritorio: el wrapper \"desaparece\" de la\n           caja del grid y sus hijos participan directo como si fueran hijos\n           de .rv-inv-filter-card \u2014 el checkbox (.pv-tab-radio, oculto global)\n           y el <label> (oculto ac\u00e1 abajo) no cuentan, as\u00ed que en escritorio\n           el \u00fanico hijo visible que queda es el buscador, exactamente el\n           mismo resultado visual que antes de este cambio. El bot\u00f3n\n           \"Filtros\" y el panel colapsable de selects son SOLO para m\u00f3vil,\n           encendidos dentro del @media de abajo. *\/\n        .rv-inv-search-wrap{display:contents}\n        .rv-inv-filtros-toggle{display:none}\n        \/* Texto corto de los botones \"+ Movimiento\"\/\"\u2193 Ingreso a\n           inventario\"\/\"+ Nuevo producto\" \u2014 oculto en escritorio, se enciende\n           dentro del @media de m\u00f3vil de m\u00e1s abajo (el texto largo de\n           siempre se apaga ah\u00ed). *\/\n        .rv-inv-accion-txt-corta{display:none}\n        .rv-inv-filter-form select,.rv-inv-search{height:32px!important;border-radius:10px!important;border:1px solid var(--pv-border)!important;background:#fff!important;padding:0 10px!important;font-size:10px!important;box-shadow:none!important}\n        .rv-inv-main-grid{display:grid;grid-template-columns:minmax(0,1fr) 256px;gap:13px;align-items:start}\n        .rv-inv-products-card,.rv-inv-side-card{border-radius:14px!important;background:#fff!important;border:1px solid var(--pv-border)!important;box-shadow:0 12px 30px rgba(30,27,46,.05)!important}\n        .rv-inv-products-card{padding:16px!important}\n        .rv-inv-section-title{margin:0 0 13px;font-size:13px;font-weight:800;color:var(--pv-ink)}\n        .rv-inv-table{border:1px solid var(--pv-border);border-radius:11px;overflow:hidden}\n        .rv-inv-table-header,.rv-inv-table-row{grid-template-columns:72px 1.55fr 108px 72px 64px 84px 84px 104px!important}\n        .rv-inv-table-header{background:var(--pv-bg)!important;color:var(--pv-muted)!important;font-size:9px!important;font-weight:800!important;text-transform:uppercase}\n        .rv-inv-table-row{min-height:48px;padding:10px 11px!important;border-bottom:1px solid var(--pv-border)!important}\n        .rv-inv-table-row:hover{background:#fbfcff!important}\n        .rv-inv-table-row strong{font-weight:800;color:var(--pv-ink)}\n        .rv-inv-table-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:10px;color:var(--pv-muted);font-size:10px;font-weight:700}\n        .rv-inv-side{display:flex;flex-direction:column;gap:11px}\n        .rv-inv-side-card{padding:14px!important}\n        .rv-inv-side-card h3{margin:0 0 13px;color:var(--pv-ink);font-size:12px;font-weight:800}\n        .rv-inv-donut{width:120px;height:120px;border-radius:50%;margin:3px auto 13px;display:flex;align-items:center;justify-content:center;flex-direction:column}\n        .rv-inv-donut strong{font-size:9px;color:var(--pv-muted);font-weight:700}\n        .rv-inv-donut span{margin-top:3px;font-size:12px;color:var(--pv-ink);font-weight:800}\n        .rv-inv-legend{display:flex;flex-direction:column;gap:7px}\n        .rv-inv-legend div{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10px}\n        .rv-inv-legend span{display:inline-flex;align-items:center;gap:6px;color:var(--pv-ink);font-weight:700}\n        .rv-inv-legend i{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}\n        .rv-inv-legend strong{color:var(--pv-ink);font-weight:800;white-space:nowrap}\n        .rv-inv-legend small{color:var(--pv-muted);font-weight:700;margin-left:2px}\n        .rv-inv-low-list{display:flex;flex-direction:column;gap:8px}\n        .rv-inv-low-item{display:grid;grid-template-columns:35px 1fr auto;gap:8px;align-items:center;padding:7px;border:1px solid var(--pv-border);border-radius:11px;background:#fff}\n        .rv-inv-low-thumb{width:32px;height:32px;border-radius:9px;background:var(--pv-bg);border:1px solid var(--pv-border);display:flex;align-items:center;justify-content:center;color:var(--pv-primary);overflow:hidden;flex-shrink:0}\n        .rv-inv-low-thumb img{width:100%;height:100%;object-fit:cover}\n        .rv-inv-low-thumb svg{width:14px;height:14px}\n        .rv-inv-low-item strong{display:block;color:var(--pv-ink);font-size:9px;line-height:1.25;font-weight:800}\n        .rv-inv-low-item span{display:block;margin-top:2px;color:var(--pv-muted);font-size:8.5px;font-weight:700}\n        .rv-inv-low-item b{color:#ff7a00;font-size:10px;font-weight:800;white-space:nowrap}\n        .rv-inv-low-link{margin-top:11px;height:30px;border-radius:10px;border:1px solid #F2D18A;color:var(--pv-primary)!important;text-decoration:none!important;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:10px}\n        .rv-inv-low-link:hover{background:#FDF0D9}\n        .rv-inv-empty{min-height:176px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--pv-muted)}\n        .rv-inv-empty div{width:51px;height:51px;border-radius:16px;background:#FDF0D9;color:var(--pv-primary);display:flex;align-items:center;justify-content:center;margin-bottom:11px}\n        .rv-inv-empty strong{color:var(--pv-ink);font-weight:800;font-size:11px}\n        .rv-inv-empty p{margin:5px 0 0;font-size:10px}\n        @media (max-width:1380px){ .rv-inv-kpis{grid-template-columns:repeat(3,minmax(0,1fr))} .rv-inv-main-grid{grid-template-columns:1fr} .rv-inv-side{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))} }\n        @media (max-width:980px){ .rv-inv-kpis{grid-template-columns:repeat(2,minmax(0,1fr))} .rv-inv-filter-card{grid-template-columns:1fr} .rv-inv-filter-form{grid-template-columns:1fr} .rv-inv-side{grid-template-columns:1fr} }\n        @media (max-width:680px){\n            \/* Slider horizontal (no grid apilado) para las 5 tarjetas KPI \u2014\n               todas del mismo ancho fijo, deslizan hacia los lados en vez de\n               ocupar 3 filas completas de alto antes de llegar al buscador\/\n               lista real. Mismo patr\u00f3n ya usado en los chips de categor\u00eda de\n               Nuevo Pedido y las tabs de Fabricaci\u00f3n (flex-wrap:nowrap +\n               overflow-x:auto + scrollbar oculta). *\/\n            .rv-inv-kpis{\n                display:flex!important;\n                flex-wrap:nowrap;\n                overflow-x:auto;overflow-y:hidden;\n                -webkit-overflow-scrolling:touch;\n                scrollbar-width:none;\n                gap:10px;\n                padding-bottom:2px;\n            }\n            .rv-inv-kpis::-webkit-scrollbar{display:none}\n            .rv-inv-kpi{flex:0 0 auto!important;width:190px;min-height:0}\n            .rv-inv-table-header{display:none!important}\n            \/* Tarjeta de producto redise\u00f1ada (boceto aprobado 2026-07-15):\n               en vez de 8 filas \"etiqueta: valor\" apiladas, se agrupa en 4\n               franjas \u2014 categor\u00eda+estado arriba, nombre+c\u00f3digo como t\u00edtulo,\n               Stock\/M\u00ednimo\/Precio en una franja de 3 columnas, acciones al\n               pie. Se reordena SOLO con CSS Grid areas, sin tocar el HTML:\n               cada div de campo sigue en el mismo orden del DOM que usa\n               escritorio (su propio grid-template-columns de 8 columnas,\n               ah\u00ed arriba, no se toca). Todo con !important porque compite\n               con las reglas gen\u00e9ricas de .pv-historial-fila (@media 820px,\n               m\u00e1s arriba en este archivo) pensadas para el patr\u00f3n simple\n               \"una fila por campo\" que este dise\u00f1o reemplaza solo ac\u00e1. *\/\n            .rv-inv-table-row{\n                display:grid!important;\n                \/* minmax(0,1fr), NO 1fr a secas: sin el \"0\", una columna se\n                   niega a encogerse m\u00e1s all\u00e1 del ancho m\u00ednimo de su\n                   contenido (default min-width:auto de Grid) \u2014 un precio de\n                   4+ cifras (\"285,71\") empujaba SOLO las columnas de Precio\n                   a crecer, descuadrando Stock\/M\u00ednimo y sacando toda la\n                   tarjeta del ancho de la pantalla (scroll horizontal). Con\n                   minmax(0,1fr) la columna puede encogerse y el texto\n                   envuelve\/trunca adentro en vez de romper el layout. *\/\n                grid-template-columns:repeat(6,minmax(0,1fr))!important;\n                grid-template-areas:\n                    \"cat cat cat cat estado estado\"\n                    \"prod prod prod prod prod prod\"\n                    \"code code code code code code\"\n                    \"stock stock minimo minimo precio precio\"\n                    \"acciones acciones acciones acciones acciones acciones\"!important;\n                row-gap:7px!important;column-gap:8px!important;\n                padding:14px 14px 12px!important;\n                border:1px solid var(--pv-border)!important;\n                border-radius:16px!important;\n                margin-bottom:10px!important;\n                background:#fff;\n                box-shadow:0 1px 2px rgba(16,24,40,.03),0 8px 20px rgba(16,24,40,.05);\n            }\n            .rv-inv-table-row>div{padding:0!important;border-bottom:none!important;justify-content:flex-start!important;text-align:left!important}\n            .rv-inv-table-row>div::before{content:none!important}\n            .rv-inv-table-row>div[data-label=\"Categor\u00eda\"]{grid-area:cat;display:flex!important;align-items:center!important;gap:6px;font-size:10.5px;font-weight:700;color:var(--pv-muted);text-transform:uppercase;letter-spacing:.03em}\n            .rv-inv-table-row>div[data-label=\"Estado\"]{grid-area:estado;justify-self:end;align-self:start}\n            .rv-inv-table-row>div[data-label=\"Producto\"]{grid-area:prod;display:flex!important;align-items:center!important;gap:8px}\n            .rv-inv-table-row>div[data-label=\"Producto\"] strong{flex:1;min-width:0;font-size:14.5px;font-weight:700;color:var(--pv-ink);line-height:1.3;overflow-wrap:break-word}\n            .rv-inv-table-row>div[data-label=\"Producto\"] .pv-detalle-flecha{order:2;flex-shrink:0;width:22px;height:22px;border-radius:50%;background:var(--pv-bg);display:inline-flex;align-items:center;justify-content:center;font-size:13px}\n            .rv-inv-table-row>div[data-label=\"C\u00f3digo\"]{grid-area:code;margin-top:-4px;font-size:11px;color:var(--pv-muted);font-variant-numeric:tabular-nums}\n            .rv-inv-table-row>div[data-label=\"Stock\"],\n            .rv-inv-table-row>div[data-label=\"M\u00ednimo\"],\n            .rv-inv-table-row>div[data-label=\"Precio\"]{\n                display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;\n                min-width:0;gap:3px;background:var(--pv-bg);padding:8px 4px!important;text-align:center!important;font-size:12.5px;font-weight:800;color:var(--pv-ink);overflow-wrap:break-word\n            }\n            .rv-inv-table-row>div[data-label=\"Stock\"]{grid-area:stock;border-radius:10px 0 0 10px}\n            .rv-inv-table-row>div[data-label=\"M\u00ednimo\"]{grid-area:minimo;border-left:1px solid var(--pv-border);border-right:1px solid var(--pv-border)}\n            \/* Precio con letra un toque m\u00e1s chica que Stock\/M\u00ednimo: es el\n               valor con m\u00e1s probabilidad de tener varias cifras (montos\n               grandes), y el badge de divisa (USD\/COP\/...) le agrega ancho\n               extra al lado. *\/\n            .rv-inv-table-row>div[data-label=\"Precio\"]{grid-area:precio;border-radius:0 10px 10px 0;color:var(--pv-primary-dark);font-size:11px}\n            \/* El badge de divisa (USD\/COP\/...) que antes iba pegado al monto\n               se apaga ac\u00e1: la divisa ahora se lee directo en la etiqueta de\n               arriba (\"PRECIO COP\"), repetirla tambi\u00e9n junto al monto era\n               redundante. *\/\n            .rv-inv-table-row>div[data-label=\"Precio\"] .pv-moneda-badge{display:none}\n            .rv-inv-table-row>div[data-label=\"Stock\"]::before,\n            .rv-inv-table-row>div[data-label=\"M\u00ednimo\"]::before{\n                content:attr(data-label)!important;font-size:8.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--pv-muted)\n            }\n            \/* \"PRECIO COP\" \/ \"PRECIO USD\": HTML real (no ::before) porque la\n               divisa necesita SU PROPIO color distinto al resto del r\u00f3tulo\n               \u2014 un pseudo-elemento ::before es un solo bloque de texto, no\n               se puede pintar la mitad de otro color. Cambia sola al tocar\n               el switch de divisas global del encabezado porque esa misma\n               acci\u00f3n vuelve a renderizar esta tarjeta completa con el\n               $vista_moneda nuevo. *\/\n            \/* text-transform:uppercase!important en las dos: a diferencia de\n               ::before (que no lo necesita, ver comentario de arriba en este\n               mismo archivo), esto S\u00cd es HTML real y la regla global\n               \".pvf-shell *{text-transform:lowercase!important}\" (fuerza\n               min\u00fascula en todo el panel) le gana a un uppercase sin\n               !important \u2014 sin esto \"Precio\"\/\"COP\" se ve\u00edan en min\u00fascula\n               (\"precio\"\/\"cop\") a pesar de la regla de arriba. *\/\n            .rv-inv-precio-etiqueta{display:block;font-size:8.5px;font-weight:800;text-transform:uppercase!important;letter-spacing:.03em;color:var(--pv-muted);margin-bottom:1px}\n            .rv-inv-precio-moneda{color:var(--pv-primary);text-transform:uppercase!important}\n            .rv-inv-table-row>div[data-label=\"Acciones\"]{grid-area:acciones;display:flex!important;justify-content:flex-end!important;align-items:center!important;gap:6px;padding-top:9px!important;border-top:1px solid var(--pv-border)!important;margin-top:2px}\n            .rv-inv-table-footer{flex-direction:column;align-items:flex-start}\n            \/* Tarjeta de movimiento redise\u00f1ada (boceto aprobado 2026-07-15,\n               mismo lenguaje que la tarjeta de Producto de arriba): Tipo+\n               Fecha arriba, Producto como t\u00edtulo, C\u00f3digo como subt\u00edtulo,\n               Almac\u00e9n\/Cantidad en una franja de 2 columnas (Cantidad se\n               pinta roja\/verde\/\u00e1mbar seg\u00fan data-color, calculado en PHP a\n               partir del mismo $colores_tipo que ya pinta el badge de\n               Tipo), Motivo+\"Por usuario\" como nota de texto, Acciones al\n               pie. Igual que Producto: reordena SOLO con CSS Grid areas,\n               sin tocar el HTML ni el grid-template-columns de 8 columnas\n               de escritorio. *\/\n            .rv-mov-table-row{\n                display:grid!important;\n                grid-template-columns:repeat(2,minmax(0,1fr))!important;\n                grid-template-areas:\n                    \"tipo fecha\"\n                    \"prod prod\"\n                    \"code code\"\n                    \"almacen cantidad\"\n                    \"motivo motivo\"\n                    \"acciones acciones\"!important;\n                row-gap:7px!important;column-gap:8px!important;\n                padding:14px 14px 12px!important;\n                border:1px solid var(--pv-border)!important;\n                border-radius:16px!important;\n                margin-bottom:10px!important;\n                background:#fff;\n                box-shadow:0 1px 2px rgba(16,24,40,.03),0 8px 20px rgba(16,24,40,.05);\n            }\n            .rv-mov-table-row.pv-historial-header{display:none!important}\n            .rv-mov-table-row>div{padding:0!important;border-bottom:none!important;justify-content:flex-start!important;text-align:left!important}\n            .rv-mov-table-row>div::before{content:none!important}\n            .rv-mov-table-row>div[data-label=\"Tipo\"]{grid-area:tipo;justify-self:start}\n            .rv-mov-table-row>div[data-label=\"Fecha\"]{grid-area:fecha;justify-self:end;font-size:10.5px;font-weight:600;color:var(--pv-muted);font-variant-numeric:tabular-nums}\n            .rv-mov-table-row>div[data-label=\"Producto\"]{grid-area:prod;font-size:14.5px;font-weight:700;color:var(--pv-ink);line-height:1.3}\n            .rv-mov-table-row>div[data-label=\"C\u00f3digo\"]{grid-area:code;margin-top:-4px;font-size:11px;color:var(--pv-muted);font-variant-numeric:tabular-nums}\n            .rv-mov-table-row>div[data-label=\"Almac\u00e9n\"],\n            .rv-mov-table-row>div[data-label=\"Cantidad\"]{\n                display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;\n                min-width:0;gap:3px;background:var(--pv-bg);padding:8px 4px!important;text-align:center!important;font-size:12.5px;font-weight:800;color:var(--pv-ink);overflow-wrap:break-word\n            }\n            .rv-mov-table-row>div[data-label=\"Almac\u00e9n\"]{grid-area:almacen;border-radius:10px 0 0 10px;border-right:1px solid var(--pv-border)}\n            .rv-mov-table-row>div[data-label=\"Cantidad\"]{grid-area:cantidad;border-radius:0 10px 10px 0}\n            .rv-mov-table-row>div[data-label=\"Almac\u00e9n\"]::before,\n            .rv-mov-table-row>div[data-label=\"Cantidad\"]::before{\n                content:attr(data-label)!important;font-size:8.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--pv-muted)\n            }\n            .rv-mov-table-row>div[data-label=\"Cantidad\"][data-color=\"rojo\"]{color:#DC2626}\n            .rv-mov-table-row>div[data-label=\"Cantidad\"][data-color=\"verde\"]{color:#16A34A}\n            .rv-mov-table-row>div[data-label=\"Cantidad\"][data-color=\"ambar\"]{color:#92400E}\n            .rv-mov-table-row>div[data-label=\"Motivo\"]{grid-area:motivo;font-size:11.5px;color:var(--pv-ink);line-height:1.5;padding-top:9px!important;border-top:1px solid var(--pv-border)!important}\n            .rv-mov-table-row>div[data-label=\"Acciones\"]{grid-area:acciones;display:flex!important;justify-content:flex-end!important;align-items:center!important;padding-top:9px!important;border-top:1px solid var(--pv-border)!important;margin-top:2px}\n            \/* La tarjeta BLANCA de fondo que envolv\u00eda toda la secci\u00f3n\n               (\"Historial de Movimientos\" + buscador + lista) ya no hace\n               falta \u2014 cada movimiento es su propia tarjeta blanca ahora, as\u00ed\n               que quedaba una tarjeta blanca metida dentro de otra tarjeta\n               blanca (doble caja, se ve\u00eda pesado). Se apaga solo ac\u00e1, en\n               m\u00f3vil; en escritorio (tabla de 8 columnas de siempre) sigue\n               siendo una sola tarjeta como est\u00e1 hoy. *\/\n            #pv-hist-mov-inv-card{background:transparent;border:none;box-shadow:none;padding:0}\n            \/* Mismo criterio que Movimientos arriba: la tarjeta de Productos\n               ya es una lista de tarjetas propias, la caja blanca que la\n               envolv\u00eda quedaba de m\u00e1s. *\/\n            #pv-hist-inventario-card{background:transparent!important;border:none!important;box-shadow:none!important;padding:0!important}\n            \/* Tarjeta de servicio redise\u00f1ada (boceto aprobado 2026-07-15,\n               mismo lenguaje que Producto\/Movimiento): Nombre como t\u00edtulo,\n               C\u00f3digo como subt\u00edtulo, Descripci\u00f3n como nota de texto\n               (cursiva gris \"Sin descripci\u00f3n\" si no tiene \u2014 el fallback\n               real vive en PHP, pv_content_servicios_tab() en\n               19-modulo-pedidos.php, as\u00ed que sale igual en escritorio, que\n               ya mostraba \"\u2014\" ah\u00ed \u2014 no era ning\u00fan tratamiento visual propio\n               de m\u00f3vil, solo un texto m\u00e1s claro), Editar\/Eliminar al pie.\n               Reordena SOLO con CSS Grid areas, sin tocar el HTML ni el\n               grid-template-columns de escritorio. *\/\n            #pv-hist-servicios-card{background:transparent;border:none;box-shadow:none;padding:0}\n            .rv-serv-table-row{\n                display:grid!important;\n                grid-template-columns:1fr!important;\n                grid-template-areas:\n                    \"nombre\"\n                    \"codigo\"\n                    \"desc\"\n                    \"acciones\"!important;\n                row-gap:4px!important;\n                padding:14px 14px 12px!important;\n                border:1px solid var(--pv-border)!important;\n                border-radius:16px!important;\n                margin-bottom:10px!important;\n                background:#fff;\n                box-shadow:0 1px 2px rgba(16,24,40,.03),0 8px 20px rgba(16,24,40,.05);\n            }\n            .rv-serv-table-row.pv-historial-header{display:none!important}\n            .rv-serv-table-row>div{padding:0!important;border-bottom:none!important;justify-content:flex-start!important;text-align:left!important}\n            .rv-serv-table-row>div::before{content:none!important}\n            .rv-serv-table-row>div[data-label=\"Nombre\"]{grid-area:nombre;font-size:14.5px;font-weight:700;color:var(--pv-ink);line-height:1.3}\n            .rv-serv-table-row>div[data-label=\"C\u00f3digo\"]{grid-area:codigo;font-size:11px;color:var(--pv-muted);font-variant-numeric:tabular-nums}\n            .rv-serv-table-row>div[data-label=\"Descripci\u00f3n\"]{grid-area:desc;font-size:11.5px;color:var(--pv-ink);line-height:1.5;padding-top:9px!important;margin-top:5px;border-top:1px solid var(--pv-border)!important}\n            .rv-serv-table-row>div[data-label=\"Descripci\u00f3n\"].rv-serv-desc-vacia{color:var(--pv-muted);font-style:italic}\n            .rv-serv-table-row>div[data-label=\"Acciones\"]{grid-area:acciones;display:flex!important;justify-content:flex-end!important;align-items:center!important;gap:6px;padding-top:9px!important;margin-top:5px;border-top:1px solid var(--pv-border)!important}\n            \/* Filtros: los 3 selects (Almac\u00e9n\/Categor\u00eda\/Estado) que en\n               escritorio van siempre visibles en una fila, en m\u00f3vil se\n               esconden dentro de un panel FLOTANTE que abre el bot\u00f3n\n               \"Filtros\" \u2014 no empuja el resto de la tarjeta hacia abajo,\n               aparece por encima con el mismo lenguaje visual que\n               .pv-personalizar-panel\/.pv-combo-panel (tarjeta blanca,\n               sombra, esquinas redondas), con r\u00f3tulo propio arriba de cada\n               select en vez del texto de la opci\u00f3n haciendo de r\u00f3tulo.\n               Toggle sin JS: el checkbox (.pv-tab-radio, vive dentro de\n               .rv-inv-search-wrap) se marca al hacer clic en el\n               <label for=\"...\">, y :has() en el contenedor padre muestra el\n               panel \u2014 mismo mecanismo que ya usan los grupos del men\u00fa\n               lateral (.pvf-nav-group:has(.pvf-nav-group-toggle:checked)). *\/\n            .rv-inv-filter-card{position:relative}\n            .rv-inv-search-wrap{display:flex;gap:8px;align-items:center}\n            .rv-inv-search{flex:1;min-width:0}\n            .rv-inv-filtros-toggle{display:flex;align-items:center;gap:6px;flex-shrink:0;background:#fff;border:1.5px solid var(--pv-border2);border-radius:10px;padding:0 13px;height:34px;font-size:11.5px;font-weight:700;color:var(--pv-ink);cursor:pointer;white-space:nowrap}\n            .rv-inv-filtros-badge{background:var(--pv-primary);color:#fff;border-radius:999px;min-width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;font-size:9.5px;font-weight:800;padding:0 4px}\n            .rv-inv-filter-card:has(#rv-inv-filtros-check:checked) .rv-inv-filtros-toggle{border-color:var(--pv-primary);background:var(--pv-bg)}\n            .rv-inv-filter-form{\n                display:none;\n                position:absolute;top:calc(100% + 8px);right:0;z-index:120;\n                width:min(258px,calc(100vw - 44px));\n                background:#fff;border:1px solid var(--pv-border);border-radius:14px;\n                box-shadow:0 14px 34px rgba(30,27,46,.16);\n                padding:12px 14px 14px;\n                grid-template-columns:1fr;gap:10px;\n            }\n            .rv-inv-filter-card:has(#rv-inv-filtros-check:checked) .rv-inv-filter-form{display:grid}\n            .rv-inv-filter-panel-head{display:flex;align-items:center;justify-content:space-between;padding-bottom:8px;border-bottom:1px solid var(--pv-border)}\n            .rv-inv-filter-panel-head strong{font-size:12px;font-weight:800;color:var(--pv-ink)}\n            .rv-inv-filter-panel-head a{font-size:10.5px;font-weight:700;color:var(--pv-primary-dark);text-decoration:none}\n            .rv-inv-filter-field{display:block}\n            .rv-inv-filter-label{display:block;font-size:9.5px;font-weight:700;color:var(--pv-muted);text-transform:uppercase;letter-spacing:.03em;margin-bottom:5px}\n            .rv-inv-filter-field select{width:100%;box-sizing:border-box;height:auto!important;padding:8px 11px!important;border:1.5px solid var(--pv-border)!important;border-radius:10px!important;font-size:12.5px!important;background:#f8fafc!important;color:var(--pv-ink)}\n            \/* \"+ Movimiento\" \/ \"\u2193 Ingreso a inventario\" \/ \"+ Nuevo producto\"\n               con texto completo no caben los 3 juntos en una fila de\n               tel\u00e9fono \u2014 el texto largo de siempre se apaga y se enciende\n               una versi\u00f3n corta (\"+ Mov.\" \/ \"\u2193 Ingreso\" \/ \"+ Nuevo\") SOLO ac\u00e1\n               adentro (escritorio sigue mostrando el texto completo, sin\n               tocar). Los botones tambi\u00e9n se achican (padding\/letra) y la\n               fila se deja con scroll horizontal como respaldo, por si alg\u00fan\n               tel\u00e9fono muy angosto todav\u00eda no alcanza a mostrar los 3\n               completos con el texto corto. *\/\n            \/* Formulario \"Nueva\/Editar Categor\u00eda\": Nombre+Almac\u00e9n en una\n               fila, Color+Bot\u00f3n en la siguiente \u2014 en vez de las 4 cayendo\n               una debajo de otra (cada una a flex:0 0 Npx fijo de\n               escritorio, ninguna cabe de a 2 en un tel\u00e9fono y el\n               flex-wrap las apila solas). CSS Grid con order: el DOM no se\n               toca (Nombre, Color, Almac\u00e9n, Bot\u00f3n, ese orden \u2014 el mismo\n               que ya usa escritorio), solo se reacomoda visualmente. Los\n               !important le ganan al flex:0 0 Npx inline de cada campo. *\/\n            .pv-cat-form-fila{display:grid!important;grid-template-columns:1fr 1fr;gap:12px}\n            .pv-cat-form-fila>div{flex:none!important;width:auto!important;margin-bottom:0!important}\n            .pv-cat-form-fila>div:nth-child(1){order:1}\n            .pv-cat-form-fila>div:nth-child(3){order:2}\n            .pv-cat-form-fila>div:nth-child(2){order:3}\n            .pv-cat-form-fila>div:nth-child(4){order:4}\n            .pv-cat-form-fila>div:nth-child(4)>div{display:flex!important}\n            .pv-cat-form-fila>div:nth-child(4) .pvf-btn{flex:1}\n        }\n        \/* ===== Panel Principal \u2014 dashboard premium ===== *\/\n        .rv-main-dashboard{width:100%;display:flex;flex-direction:column;gap:28px}\n        .rv-main-welcome{margin:0}\n        .rv-main-welcome h2{margin:0 0 4px;color:var(--pv-ink);font-size:26px!important;font-weight:800!important;letter-spacing:-.02em!important}\n        .rv-main-welcome p{margin:0;color:var(--pv-muted);font-size:14px}\n        .rv-week-banner{display:flex;align-items:center;gap:16px;background:#fff;border:1px solid rgba(var(--pv-primary-rgb),.30);border-radius:18px;padding:16px 20px;box-shadow:0 1px 2px rgba(16,24,40,.04);flex-wrap:wrap}\n        .rv-week-banner-icon{width:44px;height:44px;border-radius:12px;background:rgba(var(--pv-primary-rgb),.12);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:var(--pv-primary)}\n        .rv-week-banner-text{flex:1;font-size:14px;font-weight:700;color:var(--pv-ink);min-width:180px}\n        .rv-week-banner-range{font-weight:500;color:var(--pv-muted);font-size:12.5px;margin-left:6px;background:#F3F4F9;padding:3px 9px;border-radius:999px}\n        .rv-week-banner-btn{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:11px;color:#fff;font-size:12.5px;font-weight:700;text-decoration:none!important;white-space:nowrap}\n        .rv-week-banner-btn.verde{background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary))}\n        .rv-week-banner-btn.gris{background:#F3F4F9;border:1px solid var(--pv-border2);color:var(--pv-ink)!important}\n        .rv-dash-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}\n        .rv-kpi-card{position:relative;overflow:hidden;padding:20px;border-radius:16px;background:linear-gradient(180deg,#fff,#FBFCFE);border:1px solid var(--pv-border);border-left:4px solid var(--pv-primary);box-shadow:0 1px 0 rgba(255,255,255,.8) inset,0 2px 4px rgba(16,24,40,.05),0 16px 32px rgba(16,24,40,.08);transition:box-shadow .25s ease,transform .25s ease;display:flex;flex-direction:column;gap:10px}\n        .rv-kpi-card:hover{box-shadow:0 1px 0 rgba(255,255,255,.9) inset,0 4px 8px rgba(16,24,40,.06),0 28px 48px rgba(16,24,40,.16);transform:translateY(-6px)}\n        .rv-kpi-card.coral{border-left-color:var(--pv-danger)}\n        .rv-kpi-card.teal{border-left-color:#0D9488}\n        .rv-kpi-card.orange{border-left-color:var(--pv-secondary)}\n        .rv-kpi-card.purple{border-left-color:#7C3AED}\n        .rv-kpi-card-top{display:flex;align-items:flex-start;justify-content:space-between}\n        .rv-kpi-icon{width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));color:#fff;box-shadow:0 6px 14px rgba(var(--pv-primary-rgb),.35),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 4px rgba(0,0,0,.08)}\n        .rv-kpi-icon svg{width:17px;height:17px;filter:drop-shadow(0 1px 1px rgba(0,0,0,.15))}\n        .rv-kpi-card.coral .rv-kpi-icon{background:linear-gradient(135deg,var(--pv-danger-text),var(--pv-danger));box-shadow:0 6px 14px rgba(239,68,68,.35),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 4px rgba(0,0,0,.08)}\n        .rv-kpi-card.teal .rv-kpi-icon{background:linear-gradient(135deg,#0F766E,#14B8A6);box-shadow:0 6px 14px rgba(20,184,166,.35),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 4px rgba(0,0,0,.08)}\n        .rv-kpi-card.orange .rv-kpi-icon{background:linear-gradient(135deg,var(--pv-secondary2),var(--pv-secondary));box-shadow:0 6px 14px rgba(6,182,212,.35),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 4px rgba(0,0,0,.08)}\n        .rv-kpi-card.purple .rv-kpi-icon{background:linear-gradient(135deg,#5B21B6,#7C3AED);box-shadow:0 6px 14px rgba(124,58,237,.35),inset 0 1px 0 rgba(255,255,255,.5),inset 0 -2px 4px rgba(0,0,0,.08)}\n        .rv-kpi-label{font-size:13px;color:var(--pv-muted);font-weight:600}\n        .rv-kpi-value{color:var(--pv-ink);font-size:25px;font-weight:800;line-height:1;letter-spacing:-.02em}\n        .rv-kpi-value small{font-size:12px;letter-spacing:0;color:var(--pv-muted);font-weight:600}\n        .rv-kpi-card .pv-kpi-trend{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700}\n        .rv-kpi-card .pv-kpi-trend.up{color:var(--pv-success-text)}\n        .rv-kpi-card .pv-kpi-trend.down{color:var(--pv-danger-text)}\n        .rv-kpi-spark{margin-top:2px;overflow:visible}\n        .rv-provider-balances{border-radius:0;padding:0;margin-bottom:0;background:none;border:none;box-shadow:none}\n        .rv-provider-balances-head{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:14px;flex-wrap:wrap}\n        .rv-provider-balances-head h3{margin:0;color:var(--pv-ink);font-size:16px;font-weight:700}\n        .rv-provider-balance-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}\n        .rv-provider-card{min-height:0;border:1px solid var(--pv-border);border-radius:20px;background:#fff;padding:18px;position:relative;overflow:hidden;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.06);text-decoration:none!important;display:flex;align-items:center;gap:14px;transition:box-shadow .2s ease}\n        .rv-provider-card:hover{box-shadow:0 8px 24px rgba(15,23,42,.07)}\n        .rv-provider-card::before{content:none}\n        .rv-provider-card .rv-prov-icon{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,var(--pv-secondary2),var(--pv-primary));flex-shrink:0;position:static;letter-spacing:.02em}\n        .rv-provider-card .rv-prov-icon svg{display:none}\n        \/* El tema del sitio le baja el peso a las letras dentro de estos\n           c\u00edrculos (se ven finas\/ilegibles, una \"L\" parece una \"I\") \u2014 se\n           blinda con la misma t\u00e9cnica de cadena html body ya usada contra\n           el tema en el resto del encabezado. *\/\n        html body .pvf-shell .rv-provider-card .rv-prov-icon{color:#fff!important;font-weight:800!important;font-size:15px!important}\n        .rv-provider-card h4{margin:0;color:var(--pv-ink);font-size:13.5px;font-weight:700;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}\n        .rv-provider-card-info{min-width:0;flex:1}\n        .rv-provider-card strong{display:block;font-size:14px;font-weight:700;color:var(--pv-ink);flex-shrink:0}\n        .rv-provider-card span{display:block;margin-top:2px;color:var(--pv-danger-text);font-size:12px;font-weight:600}\n        .rv-provider-card.favor span,.rv-provider-card.al-dia span{color:var(--pv-success-text)}\n        .rv-main-grid-2{display:grid;grid-template-columns:1.6fr 1fr;gap:20px}\n        .rv-main-card{border-radius:24px;padding:24px;overflow:hidden;background:#fff;border:1px solid var(--pv-border);box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.06)}\n        .rv-main-card h3{margin:0 0 4px;color:var(--pv-ink);font-size:15px;font-weight:700}\n        .rv-main-card .rv-muted{margin:0 0 12px;color:var(--pv-muted);font-size:12px}\n        .rv-chart-wrap{position:relative}\n        .rv-chart-legend{display:flex;gap:16px;font-size:12px;color:var(--pv-muted)}\n        .rv-chart-legend span{display:flex;align-items:center;gap:6px}\n        .rv-chart-legend i{width:8px;height:8px;border-radius:50%;display:inline-block}\n        \/* Igual que los botones del topbar: el texto va pegado detr\u00e1s de un\n           \u00edcono\/punto de color sin su propio contenedor con caja, as\u00ed que\n           ::first-letter (la regla global de \"solo primera letra en\n           may\u00fascula\") no logra aplicarse \u2014 se sale de la min\u00fascula forzada\n           por completo y queda con may\u00fascula\/min\u00fascula tal cual el PHP. *\/\n        .rv-chart-legend span,.rv-top-list-row span:first-child,.rv-inv-legend span,.pv-inv-cat-nombre{text-transform:none!important}\n        .rv-donut-layout{display:flex;flex-direction:column}\n        .rv-donut-wrap{width:150px;height:150px;position:relative;display:flex;align-items:center;justify-content:center;margin:6px auto 16px}\n        .rv-donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;text-align:center}\n        .rv-donut-center div{font-size:11px;color:var(--pv-muted)}\n        .rv-donut-center strong{display:block;color:var(--pv-ink);font-size:22px;font-weight:800}\n        .rv-top-list{display:flex;flex-direction:column;gap:9px}\n        .rv-top-list-row{display:grid;grid-template-columns:1fr 40px 82px;gap:8px;align-items:center;color:var(--pv-muted);font-size:11.5px;font-weight:700}\n        .rv-top-list-row span:first-child{display:inline-flex;align-items:center;gap:7px;color:var(--pv-ink)}\n        .rv-dot{width:9px;height:9px;border-radius:50%;display:inline-block;flex-shrink:0}\n\n        \/* ===== Proveedores \u2014 grid de tarjetas + ficha ===== *\/\n        .rv-prov-page{display:flex;flex-direction:column;gap:20px}\n        .rv-prov-page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}\n        .rv-prov-page-head p{margin:2px 0 0;color:var(--pv-muted);font-size:14px}\n        .rv-prov-nuevo-btn{display:flex;align-items:center;gap:8px;padding:12px 20px;border-radius:14px;background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));color:#fff!important;font-size:14px;font-weight:600;cursor:pointer;box-shadow:0 8px 20px rgba(var(--pv-primary-rgb),.28);border:none}\n        .rv-prov-search{display:flex;align-items:center;gap:10px;max-width:380px;background:#fff;border-radius:14px;padding:11px 14px;border:1px solid var(--pv-border2)}\n        .rv-prov-search svg{flex-shrink:0;color:var(--pv-muted)}\n        .rv-prov-search input{flex:1;border:none;outline:none;font-size:13.5px;font-family:inherit;min-width:0}\n        html body .pvf-shell .rv-prov-search input{background-color:#fff!important;color:var(--pv-ink)!important}\n        \/* Chips de filtro por estado (Todos\/Deben\/A favor\/Al d\u00eda) \u2014 solo\n           m\u00f3vil, oculto por defecto ac\u00e1 y encendido dentro del @media de\n           abajo; en escritorio la tabla de 3 columnas se queda tal cual. *\/\n        .rv-prov-chips{display:none;gap:7px;overflow-x:auto;padding-bottom:2px;margin-bottom:14px;-webkit-overflow-scrolling:touch;scrollbar-width:none;justify-content:center}\n        .rv-prov-chips::-webkit-scrollbar{display:none}\n        .rv-prov-chip{flex-shrink:0;font-size:11.5px;font-weight:700;padding:7px 13px;border-radius:100px;background:#fff;border:1px solid var(--pv-border2);color:var(--pv-muted);white-space:nowrap;text-decoration:none!important;display:flex;align-items:center;gap:5px}\n        .rv-prov-chip .n{font-weight:800;font-size:10px;opacity:.75}\n        .rv-prov-chip.active{background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));border-color:transparent;color:#fff!important;box-shadow:0 6px 14px rgba(201,121,10,.28)}\n        .rv-prov-chip.active .n{opacity:.9}\n        .rv-prov-chip.c-debe{color:#DC2626!important}\n        .rv-prov-chip.c-favor{color:#2563EB!important}\n        .rv-prov-chip.c-aldia{color:#16A34A!important}\n        .rv-prov-chip.active.c-debe,.rv-prov-chip.active.c-favor,.rv-prov-chip.active.c-aldia{color:#fff!important}\n        .rv-prov-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}\n        .rv-prov-card{background:#fff;border:1px solid var(--pv-border);border-radius:22px;padding:20px;display:flex;flex-direction:column;gap:14px;text-decoration:none!important;transition:box-shadow .2s ease,transform .2s ease}\n        .rv-prov-card:hover{box-shadow:0 14px 32px rgba(15,23,42,.09);transform:translateY(-2px)}\n        .rv-prov-card-top{display:flex;align-items:center;gap:12px}\n        .rv-prov-avatar{width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .rv-prov-avatar-grande{width:64px;height:64px;font-size:20px}\n        html body .pvf-shell .rv-prov-avatar{color:#fff!important;font-weight:800!important;font-size:15px!important;letter-spacing:.02em}\n        html body .pvf-shell .rv-prov-avatar-grande{font-size:20px!important}\n        .rv-prov-card-nombre{min-width:0;flex:1}\n        .rv-prov-card-nombre-txt{font-size:14.5px;font-weight:700;color:var(--pv-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n        .rv-prov-card-rif{font-size:12.5px;color:var(--pv-muted)}\n        .rv-prov-badge{font-size:11px;font-weight:700;padding:5px 10px;border-radius:8px;flex-shrink:0;text-transform:none!important}\n        .rv-prov-badge-debe{color:#DC2626;background:rgba(239,68,68,.10)}\n        .rv-prov-badge-aldia{color:#16A34A;background:rgba(34,197,94,.10)}\n        .rv-prov-badge-favor{color:#2563EB;background:rgba(37,99,235,.10)}\n        .rv-prov-card-foot{display:flex;align-items:center;justify-content:space-between;padding-top:12px;border-top:1px solid var(--pv-border)}\n        .rv-prov-card-foot span{display:block;font-size:11.5px;color:var(--pv-muted)}\n        .rv-prov-card-foot strong{display:block;font-size:15px;font-weight:700;color:var(--pv-ink);margin-top:2px}\n        .rv-prov-card-foot-der{text-align:right}\n\n        .rv-prov-ficha{display:flex;flex-direction:column;gap:16px;max-width:760px;margin:0 auto}\n        .rv-prov-ficha-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}\n        .rv-prov-ficha-actions-danger{display:flex;justify-content:flex-end;margin-top:-8px}\n        .rv-prov-btn-quiet-del{appearance:none;font:inherit;background:none;color:#DC2626;border:1.5px solid rgba(239,68,68,.25);box-shadow:none;padding:8px 14px;font-size:12px;font-weight:700;border-radius:11px;cursor:pointer;display:inline-flex;align-items:center}\n        .rv-prov-btn-quiet-del:hover{background:rgba(239,68,68,.08)}\n        .rv-prov-ficha-header{display:flex;flex-direction:column;background:#fff;border:1px solid var(--pv-border);border-radius:20px;padding:22px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.06)}\n        .rv-prov-ficha-header-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}\n        .rv-prov-ficha-id{display:flex;align-items:center;gap:12px;min-width:0}\n        .rv-prov-ficha-header-info{min-width:0}\n        .rv-prov-ficha-header-nombre{display:flex;align-items:center;gap:8px;flex-wrap:wrap}\n        .rv-prov-ficha-header-nombre h1{margin:0;font-size:17px}\n        .rv-prov-ficha-header-sub{font-size:12px;color:var(--pv-muted);margin-top:3px}\n        .rv-prov-ficha-saldo{text-align:right;flex-shrink:0}\n        .rv-prov-ficha-saldo-label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--pv-muted)}\n        .rv-prov-ficha-saldo-valor{font-size:20px;font-weight:800;margin-top:3px}\n        .rv-prov-badge-debe-text{color:#DC2626}\n        .rv-prov-badge-aldia-text{color:#16A34A}\n        .rv-prov-badge-favor-text{color:#2563EB}\n        .rv-prov-ficha-contact-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:18px;padding-top:16px;border-top:1px solid var(--pv-border)}\n        .rv-prov-ficha-contact-item{display:flex;align-items:center;gap:10px;min-width:0}\n        .rv-prov-ficha-contact-ic{width:30px;height:30px;border-radius:9px;background:rgba(var(--pv-primary-rgb),.14);color:var(--pv-primary-dark);display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .rv-prov-ficha-contact-ic svg{margin:0!important;width:14px!important;height:14px!important}\n        .rv-prov-ficha-contact-text{min-width:0}\n        .rv-prov-ficha-contact-label{font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--pv-muted)}\n        .rv-prov-ficha-contact-valor{font-size:12.5px;font-weight:700;color:var(--pv-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}\n        .rv-cfg-card-icono-ambar{background:rgba(var(--pv-primary-rgb),.14);color:var(--pv-primary-dark)}\n        .rv-prov-card-hint{margin:2px 0 14px 42px;font-size:11.5px;color:var(--pv-muted)}\n        .rv-prov-ficha-timeline h2{margin:0}\n        .rv-prov-timeline-list{display:flex;flex-direction:column}\n        .rv-prov-timeline-row{display:flex;align-items:flex-start;gap:14px;padding:13px 0;border-bottom:1px solid var(--pv-border)}\n        .rv-prov-timeline-row:last-child{border-bottom:0}\n        .rv-prov-timeline-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .rv-prov-timeline-icon.compra{background:rgba(6,182,212,.12);color:var(--pv-secondary)}\n        .rv-prov-timeline-icon.pago{background:rgba(34,197,94,.12);color:#16A34A}\n        .rv-prov-timeline-text{flex:1;min-width:0}\n        .rv-prov-timeline-desc{font-size:13px;font-weight:700;color:var(--pv-ink);line-height:1.4;white-space:normal;word-break:break-word}\n        .rv-prov-timeline-fecha{font-size:12px;color:var(--pv-muted);margin-top:3px}\n        .rv-prov-timeline-monto{font-size:13.5px;font-weight:800;flex-shrink:0;padding-top:1px;white-space:nowrap}\n        .rv-prov-timeline-monto.compra{color:#DC2626}\n        .rv-prov-timeline-monto.pago{color:#16A34A}\n        .rv-prov-prod-list{display:flex;flex-direction:column}\n        .rv-prov-prod-row{display:flex;align-items:flex-start;gap:14px;padding:13px 0;border-bottom:1px solid var(--pv-border)}\n        .rv-prov-prod-row:last-child{border-bottom:0}\n        .rv-prov-prod-body{flex:1;min-width:0}\n        .rv-prov-prod-title{font-size:13px;font-weight:700;color:var(--pv-ink);line-height:1.4;white-space:normal;word-break:break-word}\n        .rv-prov-prod-fecha{font-size:12px;color:var(--pv-muted);margin-top:3px}\n        .rv-prov-prod-link{font-size:12px;color:var(--pv-primary-dark);font-weight:700;text-decoration:none;margin-top:5px;display:inline-block;background:none;border:none;padding:0;cursor:pointer;font-family:inherit}\n        .rv-prov-prod-right{display:flex;align-items:center;gap:8px;flex-shrink:0;padding-top:1px}\n        .rv-prov-prod-amount{font-size:13.5px;font-weight:800;color:var(--pv-ink);white-space:nowrap}\n        .rv-prov-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:26px 10px;text-align:center;color:var(--pv-muted)}\n        .rv-prov-empty svg{margin:0 0 8px!important;opacity:.5;width:26px!important;height:26px!important}\n        .rv-prov-empty-title{font-size:12.5px;font-weight:700;color:var(--pv-ink)}\n        .rv-prov-empty-sub{font-size:11.5px;margin-top:2px}\n        .rv-prov-pagina-grupo{display:contents}\n        .rv-prov-pagina-grupo[hidden]{display:none}\n        .pv-paginacion-cliente{margin-top:16px}\n        @media (max-width:640px){\n            .rv-prov-ficha-contact-row{grid-template-columns:1fr}\n            .rv-prov-ficha-header-top{flex-direction:column}\n            .rv-prov-ficha-saldo{text-align:left;width:100%}\n            .rv-prov-ficha-saldo .pv-moneda-switches{justify-content:flex-start!important}\n        }\n        @media (max-width:980px){\n            .rv-prov-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n            .rv-prov-ficha-infocards{grid-template-columns:1fr}\n            .rv-prov-ficha-header{flex-wrap:wrap}\n            .rv-prov-ficha-saldo{text-align:left;width:100%}\n        }\n        @media (max-width:640px){\n            .rv-prov-grid{grid-template-columns:1fr}\n            \/* El bot\u00f3n de texto completo \"+ Nuevo Proveedor\" compet\u00eda con el\n               t\u00edtulo por ancho \u2014 en m\u00f3vil queda un c\u00edrculo con \"+\", mismo\n               lenguaje que el bot\u00f3n \"Gasto\" de la barra inferior. *\/\n            .rv-prov-nuevo-btn{width:38px;height:38px;padding:0;border-radius:50%;justify-content:center;flex-shrink:0}\n            .rv-prov-nuevo-btn-txt{display:none}\n            .rv-prov-chips{display:flex}\n        }\n\n        \/* ===== Divisas \u2014 grid de tarjetas ===== *\/\n        .rv-divisa-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}\n        .rv-divisa-card{border-radius:22px;padding:20px;display:flex;flex-direction:column;gap:12px}\n        .rv-divisa-top{display:flex;align-items:center;gap:10px}\n        .rv-divisa-bandera{font-size:26px;line-height:1}\n        .rv-divisa-id{min-width:0;flex:1}\n        .rv-divisa-code{font-size:14.5px;font-weight:700;color:var(--pv-ink)}\n        .rv-divisa-name{font-size:12px;color:var(--pv-muted)}\n        .rv-divisa-badge-base{color:var(--pv-muted2);background:rgba(107,114,128,.12)}\n        .rv-divisa-badge-manual{color:#D97706;background:rgba(245,158,11,.12)}\n        .rv-divisa-badge-auto{color:#0891B2;background:rgba(6,182,212,.12)}\n        .rv-divisa-badge-activa{color:#16A34A;background:rgba(34,197,94,.10)}\n        .rv-divisa-rate{font-size:24px;font-weight:800;color:var(--pv-ink)}\n        .rv-divisa-rate small{font-size:13px;font-weight:700;color:var(--pv-muted)}\n        .rv-divisa-tasa-form{display:flex;align-items:center;gap:8px}\n        .rv-divisa-tasa-prefijo{font-size:12.5px;color:var(--pv-muted);font-weight:600;white-space:nowrap;flex-shrink:0}\n        .rv-divisa-tasa-form input{flex:1;min-width:0;border:1.5px solid var(--pv-border);border-radius:10px;padding:8px 10px;font-size:14px;font-weight:700;font-family:inherit;box-sizing:border-box}\n        .rv-divisa-tasa-guardar{flex-shrink:0;width:34px;height:34px;border-radius:10px;border:none;background:var(--pv-primary);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer}\n        .rv-divisa-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:12px;border-top:1px solid var(--pv-border)}\n        .rv-divisa-updated{font-size:11.5px;color:var(--pv-muted)}\n        .rv-divisa-acciones form{margin:0}\n        .rv-divisa-modo-btn{background:none;border:none;color:var(--pv-primary2);font-size:11.5px;font-weight:700;cursor:pointer;padding:0;text-decoration:underline}\n        @media (max-width:980px){\n            .rv-divisa-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n        }\n        @media (max-width:640px){\n            .rv-divisa-grid{grid-template-columns:1fr}\n        }\n\n        \/* ===== Inventario \u2014 alertas de stock, mismo lenguaje visual que las\n           tarjetas de Divisas (icono+t\u00edtulo+badge arriba, cuerpo abajo). ===== *\/\n        .rv-alerta-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}\n        .rv-alerta-card{border-radius:22px;padding:20px;display:flex;flex-direction:column;gap:4px}\n        .rv-alerta-top{display:flex;align-items:center;gap:10px;margin-bottom:4px}\n        .rv-alerta-icono{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .rv-alerta-id{min-width:0;flex:1}\n        .rv-alerta-titulo{font-size:14.5px;font-weight:700;color:var(--pv-ink)}\n        .rv-alerta-sub{font-size:12px;color:var(--pv-muted)}\n        .rv-alerta-lista{display:flex;flex-direction:column;gap:10px;max-height:280px;overflow-y:auto;margin-top:8px;padding-top:10px;border-top:1px solid var(--pv-border)}\n        .rv-alerta-item{display:flex;align-items:center;justify-content:space-between;gap:10px}\n        .rv-alerta-item-nombre{display:flex;flex-direction:column;gap:2px;min-width:0}\n        .rv-alerta-item-nombre strong{font-size:13px;color:var(--pv-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n        .rv-alerta-item-nombre span{font-size:11px;color:var(--pv-muted)}\n        @media (max-width:980px){\n            .rv-alerta-grid{grid-template-columns:1fr}\n        }\n\n        \/* ===== Reportes ===== *\/\n        .rv-reporte-export-btn{display:flex;align-items:center;gap:6px;padding:10px 16px;border-radius:12px;background:#fff;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.06);border:1px solid var(--pv-border);font-size:13px;font-weight:600;color:var(--pv-ink)!important;cursor:pointer;text-decoration:none!important}\n        .rv-reporte-export-btn svg{color:var(--pv-primary);flex-shrink:0}\n        .rv-reporte-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}\n        .rv-reporte-kpi{border-radius:18px;padding:18px;display:flex;flex-direction:column;gap:4px}\n        .rv-reporte-kpi span{font-size:12px;color:var(--pv-muted)}\n        .rv-reporte-kpi strong{font-size:20px;font-weight:800;color:var(--pv-ink)}\n        .rv-reporte-kpi strong small{font-size:12px;font-weight:700;color:var(--pv-muted)}\n        .rv-reporte-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:20px}\n        .rv-reporte-grid-2 h2{font-size:14.5px;font-weight:700;margin:0 0 16px}\n        .rv-reporte-bars{display:flex;flex-direction:column;gap:12px}\n        .rv-reporte-bar-head{display:flex;justify-content:space-between;font-size:12.5px;margin-bottom:4px}\n        .rv-reporte-bar-head span{color:var(--pv-muted3)}\n        .rv-reporte-bar-head strong{font-weight:700;color:var(--pv-ink)}\n        .rv-reporte-bar-track{height:8px;border-radius:4px;background:var(--pv-bg);overflow:hidden}\n        .rv-reporte-bar-fill{height:100%;border-radius:4px}\n        .rv-reporte-funnel{display:flex;flex-direction:column;gap:10px}\n        .rv-reporte-funnel-row{display:flex;align-items:center;gap:12px}\n        .rv-reporte-funnel-bar{height:34px;border-radius:10px;display:flex;align-items:center;padding-left:12px;color:#fff;font-size:12.5px;font-weight:700;transition:width .3s ease;white-space:nowrap;overflow:hidden}\n        .rv-reporte-funnel-row span{font-size:12.5px;font-weight:700;color:var(--pv-muted3);width:30px;flex-shrink:0;text-align:right}\n        .rv-reporte-evolucion-labels{display:flex;justify-content:space-between;margin-top:6px;font-size:10.5px;color:var(--pv-muted)}\n        @media (max-width:980px){\n            .rv-reporte-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}\n            .rv-reporte-grid-2{grid-template-columns:1fr}\n        }\n        @media (max-width:640px){\n            .rv-reporte-kpis{grid-template-columns:1fr}\n        }\n\n        \/* ===== Cuentas por Pagar\/Cobrar \u2014 grupos como tarjetas expandibles ===== *\/\n        .rv-cxp-lista{display:flex;flex-direction:column;gap:12px}\n        .rv-cxp-card.pv-historial-fila{display:block!important;grid-template-columns:none!important;gap:0!important;padding:0 20px!important;border-bottom:none!important;font-size:inherit!important}\n        .rv-cxp-card{background:#fff;border:1px solid var(--pv-border);border-radius:20px;box-shadow:0 1px 2px rgba(16,24,40,.04);padding:0 20px;overflow:hidden}\n        .rv-cxp-resumen{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:16px 0}\n        .rv-cxp-resumen .pv-detalle-flecha{flex-shrink:0}\n        .rv-cxp-nombre{flex:1 1 160px;min-width:0}\n        .rv-cxp-nombre strong{display:block;font-size:14px;font-weight:700;color:var(--pv-ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n        .rv-cxp-nombre span{display:block;font-size:12px;color:var(--pv-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n        .rv-cxp-monto{flex-shrink:0;text-align:right;font-size:14px;white-space:nowrap}\n        .rv-cxp-acciones{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:nowrap;margin-left:auto}\n        .rv-cxp-acciones form{margin:0}\n        .rv-cxp-pagar-btn{border:none;border-radius:11px;padding:9px 16px;font-size:12.5px;font-weight:700;color:#fff;cursor:pointer;background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));box-shadow:0 6px 14px rgba(var(--pv-primary-rgb),.25);white-space:nowrap}\n        .rv-cxp-abonar-btn{border:1px solid var(--pv-border2);border-radius:11px;padding:9px 16px;font-size:12.5px;font-weight:700;color:var(--pv-ink);cursor:pointer;background:#F3F4F9;white-space:nowrap}\n        .rv-cxp-card .pv-detalle-box{margin:0 0 16px}\n        @media (max-width:640px){\n            .rv-cxp-resumen{row-gap:12px}\n            .rv-cxp-nombre{flex:1 1 auto}\n            .rv-cxp-monto{order:1}\n            .rv-cxp-acciones{order:2;flex:1 1 100%;justify-content:flex-end;margin-left:0}\n        }\n\n        \/* ===== Fabricaci\u00f3n \u2014 Historial (tarjetas por etapa) ===== *\/\n        .rv-fab-tabs{display:inline-flex;align-items:center;gap:4px;background:#F3F4F9;border:1px solid var(--pv-border2);border-radius:14px;padding:4px;margin-bottom:16px;flex-wrap:wrap}\n        .rv-fab-tab{padding:10px 16px;border-radius:11px;font-size:13px;font-weight:700;color:var(--pv-muted);text-decoration:none!important;white-space:nowrap}\n        .rv-fab-tab span{color:var(--pv-muted);margin-left:2px}\n        .rv-fab-tab.active{background:#fff;color:var(--pv-primary2);box-shadow:0 1px 2px rgba(16,24,40,.06)}\n        .rv-fab-tab.active span{color:var(--pv-primary2)}\n        \/* \"Pedidos\" no es una etapa de fabricaci\u00f3n como las dem\u00e1s \u2014 un\n           separador visual deja claro que es una categor\u00eda aparte, no el\n           siguiente paso del flujo. *\/\n        .rv-fab-tab-separada{margin-left:8px;border-left:1.5px solid var(--pv-border2);padding-left:16px}\n        .rv-fab-lista{display:flex;flex-direction:column;gap:12px}\n        .rv-fab-fila{display:flex;align-items:center;gap:16px;border-radius:20px;padding:16px 20px}\n        .rv-fab-foto{width:44px;height:44px;border-radius:10px;object-fit:cover;flex-shrink:0}\n        .rv-fab-id{flex:1.4;min-width:0}\n        .rv-fab-nombre{font-size:14.5px;font-weight:700;color:var(--pv-ink)}\n        .rv-fab-nombre span{font-weight:600;color:var(--pv-muted)}\n        .rv-fab-sub{font-size:12.5px;color:var(--pv-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n        .rv-fab-progreso{flex:1;min-width:120px}\n        .rv-fab-progreso-head{display:flex;justify-content:space-between;font-size:11.5px;color:var(--pv-muted);margin-bottom:5px}\n        .rv-fab-progreso-track{height:6px;border-radius:3px;background:var(--pv-bg)}\n        .rv-fab-progreso-fill{height:100%;border-radius:3px}\n        .rv-fab-progreso-ambar{background:#F59E0B}\n        .rv-fab-progreso-celeste{background:#14B8A6}\n        .rv-fab-progreso-azul{background:#3B82F6}\n        .rv-fab-progreso-verde{background:#22C55E}\n        .rv-fab-progreso-morado{background:#8B5CF6}\n        .rv-fab-rentabilidad,.rv-fab-fecha{flex-shrink:0;text-align:center;min-width:90px}\n        .rv-fab-rentabilidad span,.rv-fab-fecha span{display:block;font-size:11px;color:var(--pv-muted)}\n        .rv-fab-rentabilidad strong{font-size:15px;font-weight:800}\n        .rv-fab-fecha strong{font-size:13px;font-weight:700;color:var(--pv-ink)}\n        .rv-fab-guia-nota{font-size:10.5px;color:var(--pv-muted);margin-top:2px}\n        .rv-fab-acciones{display:flex;align-items:center;gap:8px;flex-shrink:0}\n        .rv-fab-acciones form{margin:0}\n        \/* M\u00f3dulo Env\u00edos \u2014 badge de origen (Fabricaci\u00f3n\/Pedido) + el ancho que\n           necesita el stepper de etapas dentro de la misma fila compartida. *\/\n        .rv-env-fila{position:relative;flex-wrap:wrap}\n        .rv-env-badges{position:absolute;top:10px;right:14px;display:flex;align-items:center;gap:6px}\n        .rv-env-badge{font-size:9.5px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;padding:3px 8px;border-radius:20px;white-space:nowrap;border:none;font-family:inherit}\n        .rv-env-badge-fab{background:rgba(var(--pv-primary-rgb),.14);color:var(--pv-primary-dark)}\n        .rv-env-badge-ped{background:var(--pv-bg);color:var(--pv-muted)}\n        .rv-env-badge-retencion{background:rgba(245,158,11,.16);color:var(--pv-warning-text)}\n        button.rv-env-badge-retencion{cursor:pointer}\n        button.rv-env-badge-retencion:hover{background:rgba(245,158,11,.26)}\n        .rv-env-stepper-wrap{flex:1.6;min-width:240px}\n        .rv-env-stepper-wrap .pv-track-stepper{gap:0}\n        .rv-env-stepper-wrap .pv-track-guia,.rv-env-stepper-wrap .pv-track-nota{margin-top:8px;font-size:11.5px;padding:7px 10px}\n        .rv-fab-btn{border:none;border-radius:999px;padding:10px 18px;font-size:12.5px;font-weight:700;cursor:pointer;white-space:nowrap}\n        .rv-fab-btn-celeste{background:rgba(20,184,166,.14);color:#0D9488}\n        .rv-fab-btn-azul{background:rgba(59,130,246,.12);color:#2563EB}\n        .rv-fab-btn-verde{background:rgba(34,197,94,.12);color:#16A34A}\n        .rv-fab-btn-morado{background:rgba(139,92,246,.14);color:#7C3AED}\n        @media (max-width:1100px){\n            .rv-fab-fila{flex-wrap:wrap}\n            .rv-fab-id{flex:1 1 100%}\n            .rv-fab-progreso{flex:1 1 160px}\n        }\n        @media (max-width:640px){\n            \/* Los chips de etapa (En fabricaci\u00f3n \/ Dpto de Calidad \/ ...) no\n               caben en una fila en un tel\u00e9fono \u2014 en vez de partirlos en 2-3\n               l\u00edneas (se ve roto), se deja UNA sola fila que se desliza hacia\n               los lados, patr\u00f3n ya conocido de cualquier app con filtros. *\/\n            .rv-fab-tabs{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;max-width:100%}\n            .rv-fab-tabs::-webkit-scrollbar{display:none}\n            .rv-fab-tab{flex-shrink:0}\n            .rv-fab-fila{padding:14px 14px;border-radius:16px;gap:10px}\n            .rv-fab-rentabilidad,.rv-fab-fecha{text-align:left;min-width:0}\n            .rv-fab-acciones{flex:1 1 100%;justify-content:flex-end}\n        }\n\n        \/* ===== Cuentas Bancarias \u2014 tarjetas estilo tarjeta de cr\u00e9dito ===== *\/\n        \/* Plano a proposito, sin degradado ni sombra: es un dato (el saldo\n           total), no una accion \u2014 si se ve identico a un boton, se confunde\n           con \"Nueva cuenta\"\/\"Transferir\" que si disparan una accion. *\/\n        \/* Ahora es el <summary> de un <details> (.rv-banco-totales) \u2014 al\n           tocarlo despliega el desglose de cu\u00e1nto hay en cada divisa, en vez\n           de ser solo un dato fijo en pantalla. *\/\n        .rv-banco-total-pill{display:inline-flex;align-items:center;gap:7px;padding:10px 18px;border-radius:999px;background:#FDF0D9;border:1px solid #F2D18A;color:var(--pv-primary-dark);font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer;list-style:none;transition:background .15s ease,border-color .15s ease}\n        .rv-banco-total-pill:hover{background:#FCE8C4}\n        .rv-banco-total-pill::-webkit-details-marker{display:none}\n        .rv-banco-totales{position:relative}\n        .rv-banco-totales[open] .rv-banco-total-pill{border-color:var(--pv-primary);box-shadow:0 0 0 3px rgba(var(--pv-primary-rgb),.14)}\n        .rv-banco-totales-chevron{display:inline-flex;transition:transform .2s ease}\n        .rv-banco-totales[open] .rv-banco-totales-chevron{transform:rotate(180deg)}\n        \/* Panel: tarjeta tipo \"estado de cuenta\" \u2014 encabezado con eyebrow +\n           t\u00edtulo, lista de saldos nativos, y un bloque de cierre (\"General\")\n           con fondo tinte-marca propio para que se lea como el resumen final,\n           no como una fila m\u00e1s de la lista. *\/\n        .rv-banco-totales-panel{position:absolute;left:0;top:calc(100% + 10px);background:#fff;border:1px solid var(--pv-border);border-radius:18px;box-shadow:0 24px 56px rgba(16,24,40,.18);padding:18px;min-width:270px;z-index:200;animation:rv-banco-totales-in .16s ease}\n        @keyframes rv-banco-totales-in{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}\n        .rv-banco-totales-panel-head{margin-bottom:12px}\n        .rv-banco-totales-panel-eyebrow{display:block;font-size:9.5px;font-weight:800;text-transform:uppercase!important;letter-spacing:.07em;color:var(--pv-muted)}\n        .rv-banco-totales-panel-head h3{margin:2px 0 0;font-size:15px;font-weight:800;color:var(--pv-ink);text-transform:none!important}\n        .rv-banco-totales-lista{display:flex;flex-direction:column}\n        .rv-banco-totales-fila{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:9px 2px;border-bottom:1px solid var(--pv-border)}\n        .rv-banco-totales-fila:last-child{border-bottom:none}\n        .rv-banco-totales-codigo{display:inline-flex;align-items:center;justify-content:center;min-width:46px;padding:4px 9px;border-radius:7px;font-size:10.5px;font-weight:800;text-transform:uppercase!important;letter-spacing:.02em}\n        .rv-banco-totales-fila strong{color:var(--pv-ink);font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em}\n        \/* \"General\": un valor grande + chips de divisa para ELEGIR cu\u00e1l se\n           muestra \u2014 a prop\u00f3sito no lista las 4 divisas de una \u2014 un chip\n           activo a la vez, mismo criterio que un selector de divisa. *\/\n        .rv-banco-totales-general-block{margin:14px -18px -18px;padding:16px 18px 18px;background:linear-gradient(180deg,rgba(var(--pv-primary-rgb),.06),rgba(var(--pv-primary-rgb),.1));border-top:1px solid #F2D18A;border-radius:0 0 17px 17px}\n        .rv-banco-totales-general-block .rv-banco-totales-panel-eyebrow{color:var(--pv-primary-dark);margin-bottom:8px}\n        .rv-banco-totales-general-valor{display:flex;align-items:baseline;gap:7px;margin-bottom:12px}\n        .rv-banco-totales-general-valor strong{font-size:24px;font-weight:800;color:var(--pv-primary-dark);letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1.1}\n        .rv-banco-totales-general-valor span{font-size:13px;font-weight:800;color:var(--pv-primary-dark);text-transform:uppercase!important;opacity:.75}\n        .rv-banco-totales-chips{display:flex;flex-wrap:wrap;gap:7px}\n        .rv-banco-totales-chip{--rv-chip-color:#C9790A;appearance:none;cursor:pointer;padding:6px 13px;border-radius:999px;font-size:11px;font-weight:800;text-transform:uppercase!important;letter-spacing:.02em;background:#fff;border:1.5px solid var(--rv-chip-color);color:var(--rv-chip-color);transition:background .15s ease,color .15s ease}\n        .rv-banco-totales-chip:hover{background:color-mix(in srgb,var(--rv-chip-color) 12%,#fff)}\n        .rv-banco-totales-chip.active{background:var(--rv-chip-color);color:#fff}\n        @media (max-width:640px){ .rv-banco-totales-panel{left:auto;right:0;width:min(290px,calc(100vw - 32px))} }\n        .rv-banco-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px}\n        .rv-banco-card{border-radius:24px;padding:22px;min-height:150px;box-shadow:0 16px 32px rgba(15,23,42,.16);position:relative;transition:transform .15s ease,box-shadow .15s ease}\n        .rv-banco-card:hover{transform:translateY(-2px);box-shadow:0 20px 40px rgba(15,23,42,.2)}\n        .rv-banco-card-link{display:flex;flex-direction:column;gap:20px;height:100%;color:inherit!important;text-decoration:none!important;cursor:pointer}\n        .rv-banco-card-top{display:flex;align-items:center;justify-content:space-between}\n        .rv-banco-card-top span:first-child{font-size:13.5px;font-weight:700}\n        .rv-banco-wifi{opacity:.85;transform:rotate(90deg);display:flex}\n        .rv-banco-saldo-label{font-size:11.5px;opacity:.75}\n        .rv-banco-saldo-valor{font-size:22px;font-weight:800;letter-spacing:-.02em;margin-top:2px}\n        .rv-banco-saldo-valor small{font-size:13px;font-weight:700;opacity:.85}\n        .rv-banco-saldo-conv{font-size:12px;opacity:.8;margin-top:2px}\n        .rv-banco-metodos{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}\n        .rv-banco-metodo-pill{padding:4px 10px;border-radius:8px;background:rgba(0,0,0,.15);font-size:11px;color:inherit;font-weight:600}\n        .rv-banco-acciones{display:flex;gap:6px;position:absolute;top:16px;right:52px;opacity:1}\n        .rv-banco-acciones a,.rv-banco-acciones button{width:26px;height:26px;border-radius:8px;background:rgba(255,255,255,.22);color:#fff;border:none;display:flex;align-items:center;justify-content:center;cursor:pointer}\n        .rv-banco-acciones form{margin:0}\n        @media (max-width:1280px){\n            .rv-banco-grid{grid-template-columns:repeat(3,minmax(0,1fr))}\n        }\n        @media (max-width:980px){\n            .rv-banco-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n        }\n        @media (max-width:640px){\n            .rv-banco-grid{grid-template-columns:1fr}\n            .rv-banco-acciones{opacity:1;position:static;margin-top:6px}\n        }\n\n        \/* ===== Gastos ===== *\/\n        .rv-gastos-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin-top:18px}\n        .rv-gastos-tile{border-radius:20px;padding:20px;display:flex;flex-direction:column;gap:4px}\n        .rv-gastos-tile span{font-size:12.5px;color:var(--pv-muted)}\n        .rv-gastos-tile strong{font-size:22px;font-weight:800;color:var(--pv-ink)}\n        .rv-gastos-tile strong small{font-size:12px;font-weight:700;color:var(--pv-muted)}\n        .rv-gastos-tile-total{background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));box-shadow:0 8px 20px rgba(var(--pv-primary-rgb),.25)}\n        .rv-gastos-tile-total span{color:rgba(255,255,255,.85)}\n        .rv-gastos-tile-total strong,.rv-gastos-tile-total strong small{color:#fff}\n        .rv-gastos-cat-badge{display:inline-block;font-size:11.5px;font-weight:700;padding:4px 10px;border-radius:8px;text-transform:none!important}\n        @media (max-width:640px){\n            .rv-gastos-tiles{grid-template-columns:1fr}\n        }\n\n        .rv-bottom-grid{display:grid;grid-template-columns:.92fr .86fr .86fr;gap:16px;margin-bottom:16px}\n        .rv-finance-mini{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}\n        .rv-fin-mini-item{border-right:1px solid var(--pv-border);padding-right:10px}\n        .rv-fin-mini-item:last-child{border-right:0}\n        .rv-fin-mini-icon{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#f1efff;color:var(--pv-primary);margin-bottom:10px}\n        .rv-fin-mini-icon svg{width:16px;height:16px}\n        .rv-fin-mini-item span{color:var(--pv-muted);font-size:10px;font-weight:800;display:block;min-height:26px}\n        .rv-fin-mini-item strong{display:block;color:var(--pv-ink);font-size:20px;font-weight:900;letter-spacing:-.03em}\n        .rv-aging-row{display:grid;grid-template-columns:82px 1fr 74px 40px;gap:9px;align-items:center;margin-bottom:11px;font-size:11px;font-weight:800;color:var(--pv-muted)}\n        .rv-aging-bar{height:8px;border-radius:999px;background:var(--pv-bg);overflow:hidden}\n        .rv-aging-bar span{display:block;height:100%;border-radius:inherit}\n        .rv-activity-list{display:flex;flex-direction:column;gap:11px}\n        .rv-activity-row{display:grid;grid-template-columns:34px 1fr auto;gap:9px;align-items:center;padding-bottom:9px;border-bottom:1px solid var(--pv-border)}\n        .rv-activity-row:last-child{border-bottom:0;padding-bottom:0}\n        .rv-act-icon{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:#f1efff;color:var(--pv-primary)}\n        .rv-act-icon svg{width:15px;height:15px}\n        .rv-act-icon.green{background:#dcfce7;color:#16a34a}\n        .rv-act-icon.orange{background:#ffedd5;color:#f97316}\n        .rv-activity-row strong{display:block;color:var(--pv-ink);font-size:11.5px;font-weight:900}\n        .rv-activity-row span{display:block;color:var(--pv-muted);font-size:10.5px;font-weight:700}\n        .rv-activity-row b{color:var(--pv-ink);font-size:11.5px;font-weight:900;white-space:nowrap}\n        .rv-table-card{border-radius:18px;padding:18px}\n        .rv-table-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}\n        .rv-table-head h3{margin:0;color:var(--pv-ink);font-size:15px;font-weight:900}\n        .rv-table-head a{color:var(--pv-primary)!important;font-size:12px;font-weight:900;text-decoration:none!important}\n        .rv-table{border:1px solid var(--pv-border);border-radius:14px;overflow:hidden}\n        .rv-table-row{display:grid;grid-template-columns:110px 170px 1fr 130px 90px;gap:12px;padding:12px 14px;border-bottom:1px solid var(--pv-border);align-items:center;font-size:12.5px;color:var(--pv-ink)}\n        .rv-table-row:last-child{border-bottom:0}\n        .rv-table-header{background:var(--pv-bg);color:var(--pv-muted);font-size:10px;font-weight:900;text-transform:uppercase}\n        .rv-table-row a{color:var(--pv-primary)!important;font-weight:800;text-decoration:underline}\n        @media (max-width:1380px){\n            .rv-provider-balance-grid{grid-template-columns:repeat(3,minmax(0,1fr))}\n            .rv-dash-kpis{grid-template-columns:repeat(2,minmax(0,1fr))}\n            .rv-main-grid-2,.rv-bottom-grid{grid-template-columns:1fr}\n        }\n        @media (max-width:980px){\n            .rv-main-welcome{flex-direction:column}\n            .rv-provider-balance-grid,.rv-dash-kpis{grid-template-columns:1fr}\n            .rv-donut-layout{grid-template-columns:1fr}\n            .rv-finance-mini{grid-template-columns:repeat(2,minmax(0,1fr))}\n            .rv-table-row,.rv-table-header{grid-template-columns:1fr}\n            .rv-table-header{display:none}\n            .rv-table-row{border:1px solid var(--pv-border);border-radius:12px;margin-bottom:9px}\n        }\n        @media (max-width:640px){\n            \/* El saludo \"Hola, {nombre}\" heredaba el tama\u00f1o de escritorio\n               (26px) y se ve\u00eda desproporcionado en un tel\u00e9fono angosto \u2014\n               se achica solo ac\u00e1, el h2\/p de escritorio no se tocan. *\/\n            .rv-main-welcome h2{font-size:18px!important}\n            .rv-main-welcome p{font-size:12px}\n            \/* A 1 sola columna las tarjetas KPI quedaban gigantes y muy\n               separadas del texto \u2014 2 por fila (como en el resto del dise\u00f1o\n               m\u00f3vil) aprovecha mejor el ancho y se ve m\u00e1s una app, menos una\n               lista larga de tarjetas sueltas. El valor tambi\u00e9n se achica y\n               puede partirse en 2 l\u00edneas \u2014 a 25px un monto largo como\n               \"$426.621.639,29\" se sal\u00eda de una tarjeta de medio ancho. *\/\n            .rv-dash-kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n            .rv-kpi-card{padding:14px}\n            .rv-kpi-value{font-size:18px;white-space:normal;overflow-wrap:break-word;line-height:1.15}\n            .rv-kpi-label{font-size:11.5px}\n        }\n        @media (max-width:620px){\n            .rv-finance-mini{grid-template-columns:1fr}\n            .rv-provider-balances,.rv-main-card,.rv-table-card,.rv-kpi-card{border-radius:16px;padding:15px}\n        }\n        .pv-permisos-grid{display:flex;flex-direction:column;gap:9px;margin:13px 0}\n        .pv-permisos-modulo{background:var(--pv-bg);border:1px solid var(--pv-border);border-radius:11px;padding:11px 14px;display:flex;flex-wrap:wrap;align-items:center;gap:14px}\n        .pv-permisos-modulo-nombre{font-weight:700;color:var(--pv-ink);font-size:12px;min-width:170px}\n        .pv-permisos-acciones{display:flex;gap:14px;flex-wrap:wrap}\n        .pv-permiso-check{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--pv-ink);cursor:pointer;user-select:none}\n        .pv-permiso-check input{width:15px;height:15px;accent-color:var(--pv-primary);margin:0}\n        \/* ===== Configuraci\u00f3n \u2014 barra de pesta\u00f1as ARRIBA (dentro de un\n           cuadro), secciones debajo, zona de peligro, lista de usuarios =====\n           Antes era un men\u00fa lateral a la izquierda; el usuario lo quiso\n           arriba en vez de al lado, con la barra encerrada en su propio\n           cuadro \u2014 mismo idioma visual que .pv-subtabs (Inventario), pero\n           con grupos e \u00edcono por pesta\u00f1a. *\/\n        .rv-cfg-shell{display:flex;flex-direction:column;gap:20px;margin-top:18px}\n        .rv-cfg-rail{\n            display:flex;flex-wrap:wrap;align-items:center;gap:4px 0;\n            background:#fff;border:1px solid var(--pv-border);border-radius:16px;\n            padding:8px 10px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.04)\n        }\n        .rv-cfg-rail-group{display:flex;flex-wrap:wrap;align-items:center;gap:2px;padding-right:10px;margin-right:10px;border-right:1px solid var(--pv-border)}\n        .rv-cfg-rail-group:last-child{border-right:none;padding-right:0;margin-right:0}\n        .rv-cfg-rail-label{display:none}\n        .rv-cfg-rail-item{display:flex;align-items:center;gap:8px;flex-shrink:0;white-space:nowrap;padding:8px 14px;border-radius:999px;border:none;background:none;color:var(--pv-muted2);font:inherit;font-size:12.5px;font-weight:600;text-align:left;cursor:pointer}\n        .rv-cfg-rail-item svg{width:15px;height:15px;flex-shrink:0;opacity:.7}\n        .rv-cfg-rail-item:hover{background:var(--pv-bg);color:var(--pv-ink)}\n        .rv-cfg-rail-item.active{background:#FDF0D9;color:var(--pv-primary-dark);font-weight:800}\n        .rv-cfg-rail-item.active svg{opacity:1}\n        .rv-cfg-rail-item-peligro{color:#B91C1C}\n        .rv-cfg-rail-item-peligro:hover{background:#FEF2F2}\n        .rv-cfg-rail-item-peligro.active{background:#FEE2E2;color:#B91C1C}\n        .rv-cfg-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:20px}\n        .rv-cfg-pane{display:none}\n        .rv-cfg-pane.active{display:flex;flex-direction:column;gap:20px}\n        \/* T\u00edtulo grande de cada secci\u00f3n (Mi nombre \/ Datos generales \/ ...) \u2014\n           antes solo estaba el \u00edcono chiquito adentro de la tarjeta, se\n           perd\u00eda la jerarqu\u00eda frente al t\u00edtulo general \"Configuraci\u00f3n\". *\/\n        .rv-cfg-pane-head{margin-bottom:-6px}\n        .rv-cfg-pane-head h2{margin:0;font-size:20px;font-weight:800;color:var(--pv-ink);letter-spacing:-.01em}\n        @media (max-width:640px){\n            .rv-cfg-rail{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}\n            .rv-cfg-rail::-webkit-scrollbar{display:none}\n        }\n        .rv-cfg-card{background:#fff;border:1px solid var(--pv-border);border-radius:20px;padding:22px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.04);min-width:0}\n        \/* Cuando 2 tarjetas viven dentro del mismo <form> (ej. \"Identidad\" +\n           \"Operaci\u00f3n\" en Datos generales), el gap del contenedor padre\n           (.rv-cfg-pane) no les llega \u2014 quedan pegadas sin este separador. *\/\n        .rv-cfg-card + .rv-cfg-card{margin-top:20px}\n        .rv-cfg-card-head{display:flex;align-items:center;gap:10px;margin-bottom:16px}\n        .rv-cfg-card-icono{width:32px;height:32px;border-radius:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .rv-cfg-card-icono-verde{background:rgba(34,197,94,.12);color:#16A34A}\n        .rv-cfg-card-icono-azul{background:rgba(37,99,235,.12);color:#2563EB}\n        .rv-cfg-card-head h2{margin:0;font-size:15px}\n        .rv-cfg-campo{margin-bottom:12px}\n        .rv-cfg-campo label{display:block;font-size:11px;font-weight:700;color:var(--pv-muted);margin-bottom:4px;text-transform:uppercase;letter-spacing:.02em}\n        .rv-cfg-campo input[type=text],.rv-cfg-campo input[type=email],.rv-cfg-campo select,.rv-cfg-campo textarea{width:100%;box-sizing:border-box;padding:10px 13px;border:1.5px solid var(--pv-border2);border-radius:11px;background:#F3F4F9;font-size:13px;color:var(--pv-ink);font-family:inherit;resize:vertical}\n        .rv-cfg-logo-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}\n        .rv-cfg-logo-row img{max-height:32px;border-radius:6px;border:1px solid var(--pv-border)}\n        .rv-cfg-paletas-grid{display:flex;gap:14px;flex-wrap:wrap}\n        .rv-cfg-paleta-opcion{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:14px;border:1.5px solid var(--pv-border2);border-radius:14px;background:#F9FAFC;cursor:pointer;min-width:140px}\n        .rv-cfg-paleta-opcion input[type=radio]{position:absolute;opacity:0;pointer-events:none}\n        \/* :has() en vez de depender solo de la clase renderizada por PHP, para\n           que el resaltado salte a la opci\u00f3n clickeada al toque, sin JS ni\n           esperar a que se recargue la p\u00e1gina al guardar. *\/\n        .rv-cfg-paleta-opcion:has(input:checked),.rv-cfg-paleta-activa{border-color:var(--pv-primary);background:#fff;box-shadow:0 0 0 3px rgba(0,0,0,.04)}\n        .rv-cfg-paleta-swatches{display:flex;gap:5px}\n        .rv-cfg-paleta-swatch{width:22px;height:22px;border-radius:7px;border:1px solid rgba(0,0,0,.08)}\n        .rv-cfg-paleta-nombre{font-size:13px;font-weight:700;color:var(--pv-ink)}\n        .rv-cfg-peligro{background:#FEF2F2;border:1px solid #FCA5A5;border-radius:20px;padding:22px}\n        .rv-cfg-peligro-head{display:flex;gap:12px;align-items:flex-start;margin-bottom:16px}\n        .rv-cfg-peligro-icono{flex-shrink:0;width:38px;height:38px;border-radius:11px;background:#FEE2E2;color:#DC2626;display:flex;align-items:center;justify-content:center}\n        .rv-cfg-peligro-head h2{margin:0 0 4px;color:#B91C1C;font-size:15px}\n        .rv-cfg-peligro-head p{margin:0;color:#7F1D1D;font-size:12.5px;max-width:620px}\n        .rv-user-row{display:flex;align-items:center;gap:12px;padding:10px 12px;margin:0 -12px;border-radius:12px;cursor:pointer}\n        .rv-user-row + .rv-user-row{border-top:1px solid var(--pv-border)}\n        .rv-user-row:hover{background:var(--pv-bg)}\n        .rv-user-row.active{background:#FDF0D9}\n        .rv-user-row .rv-prov-avatar{width:36px;height:36px;font-size:12.5px}\n        .rv-user-nombre{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}\n        .rv-user-nombre strong{font-size:13px;color:var(--pv-ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n        .rv-user-nombre span{font-size:11px;color:var(--pv-muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n        \/* Tarjeta de permisos por usuario: en vez de modal, se ve inline\n           debajo de la lista \u2014 solo la del usuario elegido queda visible. *\/\n        .rv-user-permisos-panel{display:none}\n        .rv-user-permisos-panel.active{display:block}\n        .pv-inline-form{display:inline-flex;gap:6px;align-items:center;margin:0}\n        .pv-muted{color:var(--pv-muted);font-size:11px}\n        \/* Fondo \"vidrio esmerilado\" (glassmorphism) en TODOS los desplegables\n           del sistema, no solo m\u00f3vil \u2014 se ve lo de atr\u00e1s (sidebar\/topbar\/\n           contenido) desenfocado en vez de un tinte oscuro plano y s\u00f3lido.\n           -webkit- primero por Safari, que todav\u00eda necesita el prefijo. *\/\n        .pv-modal-overlay{position:fixed;inset:0;background:rgba(28,28,32,.32);-webkit-backdrop-filter:blur(16px) saturate(160%);backdrop-filter:blur(16px) saturate(160%);z-index:100000;display:flex;align-items:center;justify-content:center;padding:18px}\n        .pv-modal-overlay[hidden]{display:none}\n        .pv-modal-box{background:#fff;border-radius:18px;max-width:900px;width:100%;max-height:88vh;max-height:88dvh;overflow:auto;position:relative;box-shadow:0 20px 60px rgba(30,27,46,.35);padding:25px;animation:pv-modal-in .18s ease}\n        .pv-modal-close{position:sticky;top:0;float:right;margin:-8px -8px 0 12px;background:#eaf1fb;border:none;width:31px;height:31px;border-radius:50%;font-size:18px;line-height:1;cursor:pointer;color:var(--pv-ink);text-decoration:none;display:flex;align-items:center;justify-content:center}\n        .pv-modal-close:hover{background:#dbe7f7}\n        .pv-modal-loading{padding:36px;text-align:center;color:var(--pv-muted)}\n        .pv-modal-editar-pedido-box{max-width:1320px}\n        @keyframes pv-modal-in{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}\n        \/* M\u00f3vil (2026-07-15, revierte el intento anterior de \"pantalla\n           completa como app nativa\"): el usuario pidi\u00f3 expresamente que\n           TODOS los modales del sistema se vean como una tarjeta chica\n           centrada \u2014 igual look que escritorio, ni ventana angosta\n           estirada ni pantalla completa. No hace falta forzar un\n           max-width nuevo: cada modal ya trae el suyo (520px, 900px,\n           1320px para editar pedido, etc.) combinado con width:100% en la\n           regla base \u2014 en una pantalla angosta ese width:100% ya lo\n           encoge solo al ancho disponible (viewport menos el padding del\n           overlay), sin importar qu\u00e9 tan grande sea su max-width propio.\n           El bot\u00f3n de cerrar usa position:absolute (no sticky): sticky\n           combinado con el float:right que trae por defecto no se pegaba\n           bien al hacer scroll dentro de un modal alto (se iba con el\n           contenido en vez de quedarse arriba) \u2014 bug real encontrado en\n           \"Modificar precios\" antes de generalizar este ajuste. *\/\n        @media (max-width:600px){\n            .pv-modal-overlay{padding:16px}\n            .pv-modal-box{max-height:85vh;padding:22px 18px}\n            .pv-modal-close{position:absolute;top:12px;right:12px;left:auto;bottom:auto;float:none;margin:0;z-index:5}\n        }\n        \/* \"$\"\/\"%\" pegado al campo Valor del modal \"Modificar precios\" \u2014 solo\n           existe visualmente en m\u00f3vil (ver @media de abajo), en escritorio\n           el campo se queda exactamente como estaba (sin unidad pegada). *\/\n        .pv-mmp-valor-unidad{display:none}\n        \/* Modal \"Modificar precios\" (boceto aprobado 2026-07-15, extendido a\n           escritorio 2026-07-15 a pedido expreso del usuario \u2014 \"en\n           escritorio debemos hacerle el mismo dise\u00f1o que ten\u00edamos en el\n           m\u00f3vil\"). Antes viv\u00eda dentro de un @media(max-width:600px); ahora\n           son reglas base, sin media query, as\u00ed que aplican en cualquier\n           tama\u00f1o de pantalla. El tama\u00f1o\/posici\u00f3n chica-centrada del modal\n           en s\u00ed ya es el comportamiento general de TODOS los modales (ver\n           arriba en este archivo), as\u00ed que ac\u00e1 solo queda el CONTENIDO de\n           este formulario. *\/\n        \/* R\u00f3tulo de cada pregunta: chico y en may\u00fascula, en vez de la\n           frase larga en negrita de siempre. *\/\n        #pv-modal-mod-masiva-precios .pv-mmp-label{font-size:10.5px!important;font-weight:800!important;text-transform:uppercase;letter-spacing:.03em;color:var(--pv-muted)!important;margin-bottom:8px!important}\n        \/* \"Aumentar\/Reducir\" y \"Por %\/Monto fijo\": mismo control de\n           siempre (radios .pv-iva-opcion, JS ya existente les pone\n           .activa solo), pero repintado como UNA barra compacta en vez\n           de 2 botones sueltos con hueco entre ellos. *\/\n        #pv-modal-mod-masiva-precios .pv-iva-opciones-compacta{gap:0!important;padding:3px;background:var(--pv-bg);border-radius:11px}\n        #pv-modal-mod-masiva-precios .pv-iva-opcion{border:none!important;background:none!important;padding:9px 4px!important}\n        #pv-modal-mod-masiva-precios .pv-iva-opcion.activa{background:#fff!important;border-radius:9px!important;box-shadow:0 1px 2px rgba(16,24,40,.08)}\n        \/* Tipos de productos \/ Canales de venta: de pastillas sueltas\n           con flex-wrap a una lista tipo \"ajustes\" \u2014 nombre a la\n           izquierda, casilla a la derecha (row-reverse), separadas por\n           l\u00edneas finas en vez de huecos repartidos. El <input> real\n           sigue siendo el mismo checkbox, solo se reordena y viste. *\/\n        #pv-modal-mod-masiva-precios .pv-mmp-checklist{display:block!important;border:1px solid var(--pv-border);border-radius:12px;overflow:hidden}\n        #pv-modal-mod-masiva-precios .pv-mmp-checklist .pv-permiso-check{display:flex!important;flex-direction:row-reverse;justify-content:space-between!important;align-items:center;padding:12px 14px;border-bottom:1px solid var(--pv-border);font-size:13px;font-weight:600}\n        #pv-modal-mod-masiva-precios .pv-mmp-checklist .pv-permiso-check:last-child{border-bottom:none}\n        #pv-modal-mod-masiva-precios .pv-mmp-checklist .pv-permiso-check input{width:19px;height:19px;margin:0}\n        \/* Valor: la unidad se pega adentro del mismo recuadro del\n           input, en vez de vivir aparte en el texto de ayuda de abajo.\n           Flexbox, NO position:absolute \u2014 la primera versi\u00f3n posicionaba\n           la unidad \"a mano\" (right\/top fijos) relativa a un contenedor\n           que tambi\u00e9n ten\u00eda el r\u00f3tulo y el texto de ayuda adentro, y se\n           sal\u00eda disparada fuera de la tarjeta en cuanto esos c\u00e1lculos no\n           coincid\u00edan con el alto real. Con flex, el input y la unidad\n           simplemente se acomodan solos, uno al lado del otro, sin\n           adivinar coordenadas. *\/\n        #pv-modal-mod-masiva-precios .pv-mmp-valor-wrap{display:flex!important;align-items:stretch;border:1.5px solid var(--pv-border2);border-radius:11px;overflow:hidden}\n        #pv-modal-mod-masiva-precios .pv-mmp-valor-wrap input[name=\"valor\"]{flex:1;min-width:0;border:none!important;border-radius:0!important}\n        #pv-modal-mod-masiva-precios .pv-mmp-valor-unidad{display:flex!important;flex-shrink:0;align-items:center;padding:0 14px;background:var(--pv-bg);color:var(--pv-muted);font-weight:800;font-size:13px}\n        @media (max-width:600px){\n            .pvf-fab{position:fixed;bottom:20px;right:20px;left:auto;top:auto;width:52px;height:52px;padding:0;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:26px;z-index:500;box-shadow:0 6px 20px rgba(var(--pv-primary-rgb),.4)}\n            .pvf-fab .pvf-fab-texto{display:none}\n            .pvf-fab::after{content:\"+\";line-height:1}\n        }\n        @media (max-width:600px){\n            .pvf-btn:not(.pvf-fab){padding:8px 14px;font-size:12px;border-radius:9px}\n        }\n        .pv-cs{position:relative;display:inline-block;max-width:100%;box-sizing:border-box;vertical-align:middle}\n        .pv-form-row .pv-cs,.pvf-row .pv-cs,.pv-items-row .pv-cs{display:block;width:100%;min-width:0;max-width:420px}\n        .pv-items-row .pv-cs{max-width:100%}\n        .pv-cs-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:8px;box-sizing:border-box;cursor:pointer;font-family:inherit;text-align:left}\n        .pv-form-row .pv-cs .pv-cs-trigger,.pvf-row .pv-cs .pv-cs-trigger,.pv-items-row .pv-cs .pv-cs-trigger{display:flex;width:100%;min-width:0}\n        .pv-cs-trigger-form{padding:9px 13px;border:1.5px solid var(--pv-border);border-radius:11px;font-size:13px;background:#f8fafc;color:var(--pv-ink)}\n        .pv-cs-trigger-form:hover{border-color:var(--pv-primary)}\n        .pv-cs.pv-cs-open .pv-cs-trigger-form{border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12)}\n        .pv-cs-trigger-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n        .pv-cs-chevron{flex-shrink:0;font-size:10px;color:var(--pv-muted);transition:transform .12s}\n        .pv-cs.pv-cs-open .pv-cs-chevron{transform:rotate(180deg)}\n        .pv-cs.pv-cs-disabled .pv-cs-trigger{opacity:.55;cursor:not-allowed}\n        .pv-cs.pv-cs-error .pv-cs-trigger-form{border-color:#dc2626;box-shadow:0 0 0 4px rgba(220,38,38,.12)}\n        .pv-cs-panel{position:absolute;top:calc(100% + 4px);left:0;min-width:210px;background:#fff;border:1px solid var(--pv-border);border-radius:11px;box-shadow:0 8px 24px rgba(30,27,46,.14);z-index:1000;overflow:hidden}\n        .pv-form-row .pv-cs .pv-cs-panel,.pvf-row .pv-cs .pv-cs-panel,.pv-items-row .pv-cs .pv-cs-panel{left:0;right:0;min-width:0}\n        .pv-cs-panel[hidden]{display:none}\n        .pv-cs-search-wrap{padding:7px;border-bottom:1px solid var(--pv-border)}\n        .pv-cs-search{width:100%;padding:6px 10px;border:1px solid var(--pv-border);border-radius:8px;font-size:12px;font-family:inherit;box-sizing:border-box;background:#f8fafc}\n        .pv-cs-search:focus{outline:none;border-color:var(--pv-primary);background:#fff}\n        .pv-cs-options{max-height:210px;overflow-y:auto;overflow-x:hidden}\n        .pv-cs-option{display:flex;align-items:center;gap:9px;padding:8px 12px;font-size:12.5px;color:var(--pv-ink);cursor:pointer}\n        .pv-cs-option:hover,.pv-cs-option-highlight{background:var(--pv-bg)}\n        .pv-cs-option-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n        .pv-cs-option.active{background:#FDF0D9;color:var(--pv-primary);font-weight:700}\n        .pv-cs-option.active::after{content:\"\\2713\";margin-left:8px;font-weight:800;flex-shrink:0}\n        .pv-cs-option-disabled{opacity:.4;cursor:not-allowed}\n        .pv-cs-avatar{width:20px;height:20px;border-radius:50%;background:#FDF0D9;color:#C9790A;font-size:9.5px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .pv-cs-option.active .pv-cs-avatar{background:var(--pv-primary);color:#fff}\n        .pv-moneda-switches{display:flex;align-items:center;gap:2px;background:#F3F4F9;border:1px solid var(--pv-border2);border-radius:12px;padding:4px;width:max-content}\n        .pv-moneda-switch{display:inline-flex!important;flex-flow:row nowrap;align-items:center;gap:6px;flex-shrink:0;width:max-content;background:none;border:none;border-radius:9px;padding:6px 12px;text-decoration:none;transition:background .15s,color .15s;box-sizing:border-box;margin-bottom:0!important}\n        .pv-moneda-switch:hover{background:rgba(255,255,255,.6)}\n        .pv-moneda-switch-icono,.pv-moneda-switch-track{display:none}\n        .pv-moneda-switch-label{font-size:12.5px;font-weight:700;color:var(--pv-muted);transition:color .12s;white-space:nowrap;flex-shrink:0}\n        .pv-moneda-switch.active{background:#fff}\n        .pv-moneda-switch.active:hover{background:#fff}\n        .pv-moneda-switch.active .pv-moneda-switch-label{color:var(--pv-ink)}\n        .pv-informe-imprimir{display:none;font-family:var(--pv-font);color:#000}\n        .pv-informe-membrete{display:flex;align-items:center;gap:14px;border-bottom:2px solid #000;padding-bottom:10px;margin-bottom:18px}\n        .pv-informe-logo{max-height:46px;max-width:130px;object-fit:contain;flex-shrink:0}\n        .pv-informe-empresa{flex:1;line-height:1.4}\n        .pv-informe-empresa strong{display:block;font-size:15px;font-weight:800;color:#000;text-transform:uppercase!important}\n        .pv-informe-empresa span{font-size:11.5px;color:#333}\n        .pv-informe-fecha{font-size:11px;color:#333;white-space:nowrap;text-align:right}\n        .pv-informe-imprimir h1,.pv-informe-imprimir h2{color:#000!important;font-family:var(--pv-font)!important}\n        .pv-informe-imprimir h2{font-size:16px;margin-top:24px;border-bottom:1px solid #000;padding-bottom:4px}\n        .pv-informe-imprimir table{border-collapse:collapse;width:100%;margin-top:10px}\n        .pv-informe-imprimir th,.pv-informe-imprimir td{border:1px solid #999;padding:7px 9px;font-size:12px;text-align:left;color:#000}\n        .pv-informe-imprimir th{background:#eee;text-transform:uppercase;font-size:10px;letter-spacing:.03em;font-weight:700}\n        .pv-informe-imprimir tbody tr:nth-child(even) td{background:#fafafa}\n        @media print{\n            @page{margin:10mm 12mm}\n            #adminmenumain,#wpadminbar,#wpfooter,.pvf-no-print,.pv-no-print,#wpbody-content > .notice,.pvf-sidebar{display:none!important}\n            #wpbody-content{margin-left:0!important}\n            .pv-print-area,.pvf-print-area{max-width:700px;margin:0 auto}\n            .pv-informe-imprimir{display:block!important;margin-top:0!important}\n            .pv-informe-membrete{margin-top:0!important;padding-top:0!important}\n            .pvf-shell{margin:0!important;width:auto!important;min-height:0!important}\n            .pvf-main{padding:0!important}\n            .pv-wrap{margin-top:0!important;padding-top:0!important}\n            body{margin-top:0!important}\n            .pv-modal-overlay:not([hidden]){position:static!important;background:none!important;padding:0!important;display:block!important}\n            .pv-modal-box{box-shadow:none!important;max-height:none!important;overflow:visible!important;padding:0!important}\n            .pv-modal-close{display:none!important}\n            \/* #pv-modal-movimientos-cuenta (Cuentas Bancarias \u2192 Ver\n               movimientos) es de los pocos modales que se renderiza SIEMPRE\n               \"abierto\" (sin atributo hidden, solo aparece por PHP seg\u00fan la\n               URL) \u2014 igual que el recibo\/la ficha de proveedor. Pero a\n               diferencia de esos dos, este NO se quiere imprimir tal cual:\n               tiene su propio informe aparte en .pv-informe-imprimir (misma\n               idea que Inventario\/Env\u00edos), as\u00ed que hay que ganarle a la\n               regla \".pv-modal-overlay:not([hidden])\" de arriba con un\n               selector por id (m\u00e1s espec\u00edfico) en vez de solo pv-no-print. *\/\n            #pv-modal-movimientos-cuenta{display:none!important}\n            \/* El resto de la p\u00e1gina (men\u00fa, listas, tarjetas del m\u00f3dulo\n               detr\u00e1s) se oculta con display:none desde JS justo antes de\n               imprimir (ver pv_modal_generic_script() en 02-helpers.php,\n               listener de \"beforeprint\") \u2014 no alcanza con volverlo invisible\n               por CSS (visibility\/opacity) porque esos elementos seguir\u00edan\n               reservando su alto normal y el navegador generar\u00eda p\u00e1ginas en\n               blanco extra para \"cubrir\" ese espacio vac\u00edo. Con display:none\n               real, el recibo queda solo en el flujo normal del documento y\n               ocupa exactamente el n\u00famero de p\u00e1ginas que en verdad necesita. *\/\n            .pv-modal-recibo{margin:0!important;background:#fff!important}\n            .pv-modal-recibo .pv-modal-box{margin:0 auto!important;page-break-inside:avoid}\n            .pv-modal-recibo .pv-recibo-80mm{margin:0 auto!important}\n        }\n        \n        .pv-track-stepper{display:flex;align-items:flex-start;gap:0}\n        .pv-track-paso{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;position:relative}\n        .pv-track-paso:not(:last-child)::after{content:'';position:absolute;top:14px;left:calc(50% + 15px);right:calc(-50% + 15px);height:2px;background:var(--pv-border)}\n        .pv-track-paso.hecho:not(:last-child)::after{background:var(--pv-primary)}\n        .pv-track-punto{width:28px;height:28px;border-radius:50%;background:var(--pv-bg);color:var(--pv-muted);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;z-index:1;border:2px solid var(--pv-border)}\n        .pv-track-paso.hecho .pv-track-punto{background:var(--pv-primary);border-color:var(--pv-primary);color:#fff}\n        .pv-track-paso.activo .pv-track-punto{background:#fff;border-color:var(--pv-primary);color:var(--pv-primary2);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.15)}\n        .pv-track-paso-label{font-size:10.5px;font-weight:700;color:var(--pv-muted);margin-top:7px;line-height:1.25}\n        .pv-track-paso.hecho .pv-track-paso-label,.pv-track-paso.activo .pv-track-paso-label{color:var(--pv-ink)}\n        .pv-track-paso-fecha{font-size:9.5px;color:var(--pv-muted);margin-top:2px}\n        .pv-track-paso-desc{font-size:9px;color:var(--pv-muted);margin-top:5px;line-height:1.35;padding:0 2px}\n        .pv-track-paso.activo .pv-track-paso-desc{color:var(--pv-ink)}\n        .pv-track-guia,.pv-track-nota{font-size:12.5px;margin:12px 0 0;padding:10px 12px;border-radius:10px;background:var(--pv-bg)}\n        .pv-track-nota{color:var(--pv-muted);font-style:italic}\n    \n    <\/style><style>\n        \/* Respaldo: aunque el filtro show_admin_bar falle por alg\u00fan motivo\n           (cache, URL con par\u00e1metros distintos, etc.), esto garantiza que la\n           barra de WordPress\/Elementor nunca se vea encima del panel. *\/\n        #wpadminbar{display:none!important}\n        html.wp-toolbar{padding-top:0!important}\n        body{background:var(--pv-bg)}\n        \/* El panel se posiciona fijo cubriendo toda la ventana, para que\n           ning\u00fan contenedor de Elementor (u otro constructor de p\u00e1ginas)\n           pueda afectarlo con su propio padding, ancho m\u00e1ximo o recorte. *\/\n        body:has(.pvf-shell){overflow:hidden}\n        .pvf-shell{position:fixed;inset:0;z-index:999;display:flex;flex-direction:column;background:var(--pv-bg);font-family:\"Inter\",-apple-system,\"SF Pro Display\",sans-serif;color:var(--pv-ink)}\n        .pvf-topbar-global{display:flex;align-items:center;gap:12px;box-sizing:border-box;background:#fff;padding:14px clamp(14px,4vw,28px);flex-shrink:0;flex-wrap:wrap;margin:14px 14px 0 14px;border-radius:16px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 20px rgba(16,24,40,.05)}\n        .pvf-body-row{display:flex;flex:1;min-height:0;padding:14px;gap:14px;box-sizing:border-box}\n        .pvf-sidebar{width:264px;flex-shrink:0;padding:20px 14px;box-sizing:border-box;display:flex;flex-direction:column;height:100%;background:#fff;border-radius:16px;box-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 20px rgba(16,24,40,.05);transition:width .2s ease}\n        .pvf-sidebar-inner{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}\n        .pvf-nav-body{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:2px}\n        .pvf-collapse-toggle{display:flex;align-items:center;justify-content:flex-start;width:auto;height:auto;padding:6px 14px 18px 14px;border-radius:0;cursor:pointer;flex-shrink:0;color:var(--pv-muted);background:none;border:none}\n        .pvf-collapse-toggle svg{transition:transform .2s ease}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-collapse-toggle svg{transform:rotate(180deg)}\n        .pvf-brand{display:flex;align-items:center;gap:9px;min-width:0;overflow:hidden}\n        .pvf-brand img{max-height:29px;max-width:100%}\n        .pvf-sidebar-bottom{display:flex;align-items:center;gap:10px;padding:12px;margin-top:8px;border-radius:16px;background:var(--pv-bg);cursor:pointer;list-style:none}\n        .pvf-sidebar-bottom img{max-width:100%;max-height:72px;object-fit:contain}\n        .pvf-sidebar-bottom::-webkit-details-marker{display:none}\n        .pvf-sidebar-user-menu{position:relative;margin-top:8px}\n        .pvf-sidebar-user-menu .pvf-sidebar-bottom{margin-top:0}\n        .pvf-sidebar-user-menu .pvf-user-dropdown{left:0;right:auto;top:auto;bottom:calc(100% + 6px)}\n        .pvf-topbar-empresa{color:var(--pv-ink);font-weight:700;font-size:13px;white-space:nowrap}\n        .pvf-nav-label{color:#B0B8C4;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:6px 14px 8px 14px;margin:0}\n        .pvf-nav a{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:14px;color:var(--pv-muted3);text-decoration:none;font-size:14.5px;font-weight:600;margin-bottom:0;transition:background .18s ease,color .18s ease;box-sizing:border-box}\n        .pvf-nav-icono{display:inline-flex;align-items:center;justify-content:flex-start;width:18px;flex-shrink:0;color:var(--pv-muted)}\n        \/* Los \u00edconos de pv_icono_modulo() no todos traen el mismo width\/height\n           nativo \u2014 sin forzarlos al mismo tama\u00f1o, quedaban desalineados entre\n           s\u00ed dentro del men\u00fa (unos m\u00e1s pegados a la izquierda que otros),\n           sobre todo notorio en el flotante de submen\u00fa del modo contra\u00eddo. *\/\n        .pvf-nav-icono svg{width:18px!important;height:18px!important}\n        .pvf-nav a svg{flex-shrink:0}\n        .pvf-nav a:hover{background:var(--pv-bg)}\n        .pvf-nav a.active{background:rgba(var(--pv-primary-rgb),.10);color:var(--pv-primary2);font-weight:700}\n        .pvf-nav a.active .pvf-nav-icono{color:var(--pv-primary2)}\n        .pvf-nav-group-toggle{display:none}\n        .pvf-nav-group-label{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:14px;color:var(--pv-muted3);font-size:14.5px;font-weight:600;margin-bottom:0;cursor:pointer;user-select:none;transition:background .18s ease,color .18s ease}\n        .pvf-nav-group-label:hover{background:var(--pv-bg)}\n        .pvf-nav-group-label svg{flex-shrink:0}\n        .pvf-nav-group-label.active{background:rgba(var(--pv-primary-rgb),.10);color:var(--pv-primary2);font-weight:700}\n        .pvf-nav-group-label.active .pvf-nav-icono{color:var(--pv-primary2)}\n        .pvf-nav-chevron{margin-left:auto;display:flex;color:var(--pv-muted);transition:transform .18s ease}\n        .pvf-nav-group:has(.pvf-nav-group-toggle:checked) .pvf-nav-chevron{transform:rotate(180deg)}\n        .pvf-nav-group-items{display:none;flex-direction:column;margin:2px 8px 6px 34px;padding:0 0 0 0;gap:1px;border-left:none}\n        .pvf-nav-group:has(.pvf-nav-group-toggle:checked) .pvf-nav-group-items{display:flex}\n        .pvf-nav-group-items a{padding:8px 12px;border-radius:10px;font-size:13.5px}\n        .pvf-hamburger{display:none;flex-direction:column;justify-content:center;gap:4px;width:31px;height:31px;cursor:pointer;flex-shrink:0}\n        .pvf-hamburger span{display:block;width:18px;height:2px;background:var(--pv-ink);border-radius:2px}\n        .pvf-hamburger-topbar{display:none;flex-direction:column;justify-content:center;gap:4px;width:28px;height:28px;cursor:pointer;flex-shrink:0}\n        .pvf-hamburger-topbar span{display:block;width:18px;height:2px;background:var(--pv-ink);border-radius:2px}\n        #pvf-nav-toggle{display:none}\n        .pvf-main{flex:1;min-width:0;min-height:0;padding:0 clamp(4px,2vw,18px) 46px 0;box-sizing:border-box;overflow:auto;background:transparent}\n        .pvf-main-body{}\n        .pvf-search{position:relative;flex:0 1 308px;min-width:180px;max-width:308px;margin:0 28px 0 auto}\n        .pvf-search input{width:100%;padding:10px 48px 10px 40px;border:1px solid var(--pv-border2);border-radius:14px;font-size:13.5px;background:#F3F4F9;font-family:inherit;box-sizing:border-box;color:var(--pv-ink)}\n        .pvf-search input:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.12);background:#fff}\n        .pvf-search-icono{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:#9AA3B5;pointer-events:none;display:flex}\n        .pvf-search-kbd{position:absolute;right:9px;top:50%;transform:translateY(-50%);font-size:11px;font-weight:400;color:#9AA3B5;background:#fff;box-shadow:0 1px 2px rgba(16,24,40,.04),0 10px 28px rgba(16,24,40,.06);border:1px solid var(--pv-border);border-radius:6px;padding:2px 6px;pointer-events:none}\n        .pvf-topbar-logo{display:flex;align-items:center;flex-shrink:0;margin-right:2px}\n        .pvf-topbar-logo img{display:block;max-height:38px;max-width:170px;width:auto;height:auto;object-fit:contain}\n        .pvf-topbar-left{display:none}\n        .pvf-topbar-icono{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .pvf-breadcrumb{font-size:11px;color:var(--pv-muted);margin-top:2px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}\n        .pvf-breadcrumb a{color:var(--pv-muted);text-decoration:none}\n        .pvf-breadcrumb a:hover{color:var(--pv-primary2);text-decoration:underline}\n        .pvf-topbar-title{font-size:22px;font-weight:800;color:var(--pv-ink);letter-spacing:-.01em}\n        .pvf-topbar-user{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--pv-muted);flex-wrap:wrap}\n        .pvf-topbar-divider{width:1px;height:24px;background:var(--pv-border);flex-shrink:0;display:none}\n        .pvf-topbar-user a{color:var(--pv-muted);text-decoration:underline;white-space:nowrap}\n        .pvf-topbar-empresa{display:none}\n        .pvf-topbar-quick-btn{display:flex;align-items:center;gap:6px;padding:7px 15px;border-radius:999px;color:#fff;font-size:12.5px;font-weight:700;cursor:pointer;text-decoration:none!important;white-space:nowrap;border:none}\n        .pvf-topbar-quick-btn svg{flex-shrink:0;width:14px;height:14px}\n        \/* El tema\/Elementor del sitio le pone subrayado + min\u00fascula a los <a>\n           globalmente con su propia especificidad alta \u2014 estos botones son el\n           CTA principal del encabezado, as\u00ed que se blindan con la misma\n           t\u00e9cnica de cadena html body ya usada para ganarle al tema. *\/\n        html body .pvf-shell .pvf-topbar-quick-btn,html body .pvf-shell .pvf-topbar-quick-btn *{text-decoration:none!important;text-transform:none!important;font-weight:700!important;color:#fff!important}\n        .pvf-topbar-quick-btn.pvf-qb-verde{background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));box-shadow:0 8px 18px rgba(var(--pv-primary-rgb),.30)}\n        .pvf-topbar-quick-btn.pvf-qb-naranja{background:linear-gradient(135deg,var(--pv-accent),var(--pv-accent2));box-shadow:0 8px 18px rgba(var(--pv-accent-rgb),.28)}\n        .pvf-topbar-fecha{font-size:13px;font-weight:700;color:var(--pv-muted);margin:0 2px 0 6px;white-space:nowrap}\n        .pvf-topbar-bcv{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;background:var(--pv-bg);color:var(--pv-ink);font-size:12px;font-weight:700;white-space:nowrap;flex-shrink:0}\n        .pvf-topbar-bcv svg{color:var(--pv-primary-dark);flex-shrink:0}\n        .pvf-topbar-bcv .pvf-topbar-bcv-label{color:var(--pv-muted);font-weight:700}\n        .pvf-topbar-bcv strong{font-weight:800}\n        .pvf-topbar-bell{width:38px;height:38px;border-radius:12px;background:#F3F4F9;border:1px solid var(--pv-border2);display:flex;align-items:center;justify-content:center;cursor:pointer;position:relative;flex-shrink:0;color:var(--pv-muted3)}\n        .pvf-topbar-bell-dot{position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:50%;background:var(--pv-danger)}\n        .pvf-user-menu{position:relative}\n        .pvf-user-menu summary{display:flex;align-items:center;gap:7px;cursor:pointer;list-style:none;padding:0;border-radius:9px}\n        .pvf-user-menu summary::-webkit-details-marker{display:none}\n        .pvf-avatar-mini{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,var(--pv-secondary2),var(--pv-primary));color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;flex-shrink:0;overflow:hidden}\n        .pvf-avatar-logo{background:#fff;border:1px solid var(--pv-border)}\n        .pvf-avatar-logo img{width:100%;height:100%;object-fit:contain;padding:3px;box-sizing:border-box}\n        .pvf-user-texto{display:none}\n        .pvf-user-dropdown{position:absolute;right:0;top:calc(100% + 6px);background:#fff;border:1px solid var(--pv-border);border-radius:11px;box-shadow:0 20px 50px rgba(16,24,40,.18);padding:6px;min-width:170px;z-index:50}\n        .pvf-user-dropdown a{display:block;padding:7px 9px;border-radius:7px;color:var(--pv-ink)!important;text-decoration:none!important;font-size:12px;font-weight:600}\n        .pvf-user-dropdown a:hover{background:var(--pv-bg)}\n        .pvf-user-dropdown-quien{display:flex;flex-direction:column;line-height:1.3;padding:7px 9px 9px;margin-bottom:4px;border-bottom:1px solid var(--pv-border)}\n        .pvf-user-dropdown-quien strong{color:var(--pv-ink);font-size:12.5px;font-weight:700}\n        .pvf-user-dropdown-quien small{color:var(--pv-muted);font-size:10.5px}\n        .pvf-user-profile-card{display:flex;flex-direction:column;line-height:1.25;min-width:0;overflow:hidden}\n        .pvf-user-profile-card strong{font-size:13.5px;font-weight:600;color:var(--pv-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n        .pvf-user-profile-card small{font-size:12px;color:var(--pv-muted)}\n        .pvf-help-link{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:14px;cursor:pointer;font-size:14px;color:var(--pv-muted3);text-decoration:none}\n        .pvf-help-link:hover{background:var(--pv-bg)}\n        .pvf-help-link svg{color:var(--pv-muted);flex-shrink:0}\n        .pvf-sidebar-bottom-more{margin-left:auto;flex-shrink:0;color:var(--pv-muted);display:flex}\n        \/* Bot\u00f3n \"Divisas\" del encabezado \u2014 reemplaza la franja de pastillas\n           (una por divisa) que compet\u00eda por espacio con el t\u00edtulo en m\u00f3vil.\n           Mismo patr\u00f3n <details>\/<summary> que .pvf-user-menu, as\u00ed que el\n           abrir\/cerrar es nativo del navegador; solo hace falta JS aparte\n           para cerrarlo al hacer clic afuera (ver script m\u00e1s abajo) y para\n           la animaci\u00f3n de entrada del panel. *\/\n        \/* display:none ac\u00e1 es a prop\u00f3sito: este bot\u00f3n es SOLO para m\u00f3vil\n           (el desktop se queda con la franja de pastillas de siempre, sin\n           tocar) \u2014 se enciende de nuevo dentro del @media de m\u00f3vil. *\/\n        .pvf-divisa-menu{display:none;position:relative;flex-shrink:0}\n        .pvf-divisa-btn{display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;padding:6px 12px 6px 6px;border-radius:12px;border:1px solid var(--pv-border2);background:#F3F4F9;transition:background .15s ease,border-color .15s ease}\n        .pvf-divisa-btn::-webkit-details-marker{display:none}\n        .pvf-divisa-btn:hover{background:#fff;border-color:var(--pv-primary)}\n        .pvf-divisa-menu[open] .pvf-divisa-btn{background:#fff;border-color:var(--pv-primary);box-shadow:0 0 0 3px rgba(var(--pv-primary-rgb),.14)}\n        .pvf-divisa-btn-icono{width:26px;height:26px;border-radius:8px;background:linear-gradient(135deg,var(--pv-primary2),var(--pv-primary));color:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n        .pvf-divisa-btn-icono svg{width:14px!important;height:14px!important}\n        .pvf-divisa-btn-texto{display:flex;flex-direction:column;line-height:1.2;text-align:left}\n        \/* El resto del sistema fuerza min\u00fascula en TODO el texto a prop\u00f3sito\n           (.pvf-shell *{text-transform:lowercase!important}, ver m\u00e1s arriba)\n           \u2014 pero un c\u00f3digo de divisa en min\u00fascula (\"cop\") no se lee como tal,\n           siempre van en may\u00fascula por convenci\u00f3n (COP, USD...), as\u00ed que ac\u00e1\n           se le gana a esa regla general a prop\u00f3sito. *\/\n        .pvf-divisa-btn-texto strong{font-size:13px;font-weight:800;color:var(--pv-ink);text-transform:uppercase!important}\n        .pvf-divisa-opcion-codigo{text-transform:uppercase!important}\n        .pvf-divisa-btn-texto small{font-size:9.5px;color:var(--pv-muted);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n        .pvf-divisa-chevron{display:flex;color:var(--pv-muted);transition:transform .2s ease;flex-shrink:0}\n        .pvf-divisa-chevron svg{width:14px;height:14px}\n        .pvf-divisa-menu[open] .pvf-divisa-chevron{transform:rotate(180deg);color:var(--pv-primary-dark)}\n        .pvf-divisa-dropdown{position:absolute;right:0;top:calc(100% + 8px);background:#fff;border:1px solid var(--pv-border);border-radius:14px;box-shadow:0 20px 50px rgba(16,24,40,.18);padding:8px;min-width:240px;z-index:200;animation:pvf-divisa-in .16s ease}\n        @keyframes pvf-divisa-in{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}\n        .pvf-divisa-dropdown-label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--pv-muted);padding:6px 10px 8px}\n        .pvf-divisa-opcion{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;text-decoration:none!important}\n        .pvf-divisa-opcion:hover{background:var(--pv-bg)}\n        .pvf-divisa-opcion.active{background:#FDF0D9}\n        .pvf-divisa-opcion-codigo{font-size:10.5px;font-weight:800;color:var(--pv-primary-dark);background:#FDF0D9;padding:3px 7px;border-radius:6px;flex-shrink:0;min-width:36px;text-align:center}\n        .pvf-divisa-opcion.active .pvf-divisa-opcion-codigo{background:#fff}\n        .pvf-divisa-opcion-nombre{flex:1;font-size:12.5px;font-weight:600;color:var(--pv-ink)!important}\n        \/* El check ahora se pinta SIEMPRE en el HTML (no solo en la divisa\n           activa al cargar la p\u00e1gina) y se muestra\/oculta por CSS seg\u00fan la\n           clase .active del propio <a> \u2014 as\u00ed, cuando el JS mueve esa clase\n           al elegir otra divisa (pv_moneda_switch_script), el check se\n           mueve solo con ella, sin depender de un re-render del servidor. *\/\n        .pvf-divisa-opcion-check{width:16px;height:16px;color:var(--pv-primary-dark);flex-shrink:0;display:none}\n        .pvf-divisa-opcion.active .pvf-divisa-opcion-check{display:block}\n        .pvf-login-stage{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2.5rem 1.25rem;background:var(--pv-bg,#FAF7F1);box-sizing:border-box}\n        .pvf-login-shell{width:100%;max-width:960px;min-height:600px;background:#fff;border-radius:28px;box-shadow:0 1px 2px rgba(28,24,16,.04),0 24px 48px -18px rgba(28,24,16,.28);display:grid;grid-template-columns:1.05fr 1fr;overflow:hidden}\n        .pvf-login-shell-solo{max-width:440px;min-height:0;grid-template-columns:1fr}\n        .pvf-login-logo-solo{display:block;max-width:180px;max-height:64px;object-fit:contain;margin:0 auto 18px}\n        .pvf-login-brand-mark{width:52px;height:52px;border-radius:14px;background:linear-gradient(160deg,var(--pv-primary),var(--pv-primary-dark));display:flex;align-items:center;justify-content:center;font-weight:800;font-size:21px;color:#1C1C1C;flex-shrink:0;box-shadow:0 8px 20px -6px rgba(var(--pv-primary-rgb),.55)}\n        .pvf-login-formside{padding:52px 48px;display:flex;flex-direction:column;justify-content:center;box-sizing:border-box}\n        .pvf-login-head{margin-bottom:26px}\n        .pvf-login-eyebrow{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--pv-primary-dark);margin-bottom:8px}\n        .pvf-login-head h2{margin:0 0 6px;font-size:24px;font-weight:800;letter-spacing:-.01em;color:var(--pv-ink)}\n        .pvf-login-head p{margin:0;font-size:13px;color:var(--pv-muted)}\n        .pvf-login-alerta{background:#fee2e2;color:#991b1b;border-radius:10px;padding:10px 14px;margin-bottom:18px;font-size:12.5px;font-weight:600;text-align:center}\n        .pvf-login-campo{margin-bottom:16px}\n        .pvf-login-campo label{display:block;font-size:11.5px;font-weight:700;color:var(--pv-ink);margin-bottom:7px}\n        .pvf-login-campo-input{position:relative}\n        .pvf-login-campo-input > svg{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--pv-muted);pointer-events:none}\n        .pvf-login-campo-input input{width:100%;box-sizing:border-box;font:inherit;font-size:14px;padding:13px 42px 13px 42px;border-radius:12px;border:1.5px solid var(--pv-border2,var(--pv-border));background:#FBF9F4;color:var(--pv-ink);transition:border-color .15s,box-shadow .15s,background .15s}\n        .pvf-login-campo-input input:focus{outline:none;border-color:var(--pv-primary);box-shadow:0 0 0 4px rgba(var(--pv-primary-rgb),.14);background:#fff}\n        .pvf-login-toggle-eye{position:absolute;right:12px;top:50%;transform:translateY(-50%);cursor:pointer;color:var(--pv-muted);display:flex}\n        .pvf-login-toggle-eye:hover{color:var(--pv-ink)}\n        .pvf-login-fila{display:flex;align-items:center;justify-content:space-between;margin:2px 0 24px;flex-wrap:wrap;gap:8px}\n        .pvf-login-recordar{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--pv-ink);font-weight:600;cursor:pointer;user-select:none}\n        .pvf-login-recordar input{width:16px;height:16px;accent-color:var(--pv-primary-dark);cursor:pointer}\n        .pvf-login-olvido{font-size:12.5px;color:var(--pv-primary-dark);font-weight:700;text-decoration:none}\n        .pvf-login-olvido:hover{text-decoration:underline}\n        .pvf-login-btn{width:100%;appearance:none;border:none;border-radius:13px;padding:14px;font:inherit;font-size:14px;font-weight:800;color:#1C1C1C;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:9px;background:linear-gradient(160deg,var(--pv-primary),var(--pv-primary-dark));box-shadow:0 10px 24px -8px rgba(201,121,10,.55);transition:transform .12s,box-shadow .12s}\n        .pvf-login-btn:hover{transform:translateY(-1px);box-shadow:0 12px 28px -8px rgba(201,121,10,.65)}\n        .pvf-login-foot{margin-top:26px;text-align:center;font-size:12px;color:var(--pv-muted)}\n        .pvf-login-foot a{color:var(--pv-ink);font-weight:700;text-decoration:none}\n        .pvf-login-seguridad{margin-top:22px;display:flex;align-items:center;justify-content:center;gap:7px;font-size:11px;color:var(--pv-muted)}\n        .pvf-login-seguridad svg{color:#1F8A5C;flex-shrink:0}\n        @media (max-width:760px){\n            .pvf-login-shell{grid-template-columns:1fr;min-height:auto}\n            .pvf-login-formside{padding:40px 26px}\n            .pvf-login-stage{padding:1.5rem 1rem}\n        }\n        #pvf-sidebar-collapse{display:none}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar{width:84px}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-brand span,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-label,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav a span:not(.pvf-nav-icono),\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-group-label span:not(.pvf-nav-icono),\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-chevron,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-group-items,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-help-link span,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-user-profile-card,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-sidebar-bottom-more{display:none}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav a,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-group-label,\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-help-link{justify-content:center;padding:10px}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-brand{justify-content:center}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-collapse-toggle{justify-content:center}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-sidebar-bottom{justify-content:center;padding:12px 0}\n        \/* Con el men\u00fa contra\u00eddo a solo \u00edconos, los grupos (p. ej. \"Cuentas\")\n           quedaban imposibles de abrir: sus sub-enlaces se ocultaban con\n           display:none sin ninguna forma de volver a mostrarlos. Ahora, si\n           el grupo est\u00e1 abierto, sus sub-enlaces aparecen como un men\u00fa\n           flotante junto al \u00edcono. Se usa position:fixed (no absolute) y JS\n           para ubicarlo, porque .pvf-sidebar tiene scroll vertical propio y\n           eso recorta cualquier cosa que se salga por los lados si se usa\n           position:absolute.\n           OJO: en modo contra\u00eddo la visibilidad del flotante NO depende del\n           checkbox (:checked) sino de la clase .pvf-flyout-open puesta por\n           JS \u2014 el checkbox se marca \"checked\" en el servidor solo para que\n           el grupo se vea expandido en el men\u00fa NORMAL cuando ya est\u00e1s en una\n           de sus p\u00e1ginas, y si el flotante dependiera de eso, se\n           auto-abrir\u00eda solo en cada p\u00e1gina del grupo sin poder cerrarse. *\/\n        .pvf-nav-group{position:relative}\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-group.pvf-flyout-open .pvf-nav-group-items{\n            display:flex;position:fixed;margin:0;padding:6px;\n            background:#fff;border:1px solid var(--pv-border);border-radius:11px;\n            box-shadow:0 10px 30px rgba(30,27,46,.15);min-width:200px;z-index:1000\n        }\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-group.pvf-flyout-open .pvf-nav-group-items a span:not(.pvf-nav-icono){display:inline}\n        \/* La regla de arriba (l\u00ednea ~139) centra \".pvf-nav a\" completo cuando\n           el sidebar est\u00e1 contra\u00eddo, pensada para los links de un solo \u00edcono\n           sin texto. El submen\u00fa flotante S\u00cd muestra \u00edcono+texto lado a lado\n           (l\u00ednea de arriba), as\u00ed que hay que devolverle la alineaci\u00f3n normal\n           a la izquierda o queda todo centrado dentro del recuadro. *\/\n        #pvf-sidebar-collapse:checked ~ .pvf-shell .pvf-sidebar .pvf-nav-group.pvf-flyout-open .pvf-nav-group-items a{justify-content:flex-start;padding:8px 12px}\n        .pvf-nav-backdrop{display:none}\n        \/* Barra de navegaci\u00f3n inferior \u2014 reemplaza al sidebar en m\u00f3vil como\n           forma principal de moverse por el sistema (m\u00e1s f\u00e1cil de alcanzar\n           con el pulgar que un men\u00fa lateral). Oculta por defecto ac\u00e1 mismo;\n           el @media de abajo es lo \u00fanico que la enciende, as\u00ed que ESTA\n           declaraci\u00f3n base tiene que ir ANTES que esa regla en el archivo \u2014\n           con la misma especificidad, en CSS gana la que est\u00e1 m\u00e1s abajo, y\n           si el \"display:none\" base quedara despu\u00e9s del \"display:flex\" del\n           media query (como pas\u00f3 la primera vez), la barra nunca se ve sin\n           importar el tama\u00f1o de pantalla. *\/\n        \/* height 72px (no 64px) y padding-top 12px (no 6px): el bot\u00f3n de\n           Gasto se eleva con top:-4px sobre su posici\u00f3n normal \u2014 con menos\n           aire arriba, el c\u00edrculo se sal\u00eda por encima del borde blanco de la\n           barra hacia el fondo gris de atr\u00e1s en vez de quedar contenido\n           adentro. *\/\n        .pvf-bottomnav{display:none;position:fixed;left:0;right:0;bottom:0;z-index:1800;height:72px;box-sizing:border-box;background:#fff;border-top:1px solid var(--pv-border);padding:12px 4px calc(env(safe-area-inset-bottom,0px) + 4px);box-shadow:0 -4px 16px rgba(16,24,40,.06)}\n        .pvf-bn-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:6px 2px;color:var(--pv-muted);text-decoration:none;background:none;border:none;font-family:inherit;cursor:pointer}\n        .pvf-bn-item span:last-child{font-size:10px;font-weight:700}\n        .pvf-bn-ico{display:flex;align-items:center;justify-content:center}\n        .pvf-bn-ico svg{width:20px!important;height:20px!important}\n        .pvf-bn-item.active{color:var(--pv-primary-dark)}\n        .pvf-bn-fab{position:relative;top:-4px;color:var(--pv-accent2)}\n        .pvf-bn-fab-circle{width:34px;height:34px;flex-shrink:0;border-radius:50%;background:linear-gradient(135deg,var(--pv-accent),var(--pv-accent2));color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 10px rgba(var(--pv-accent-rgb),.35);margin-bottom:2px}\n        .pvf-bn-fab-circle svg{width:16px!important;height:16px!important}\n        @media (max-width: 820px){\n            \/* La barra lateral se reduce a nada visible en m\u00f3vil: el men\u00fa\n               solo aparece como volante fijo al abrir la hamburguesa del\n               encabezado (.pvf-hamburger-topbar), modelo \"E\" aprobado\n               (hamburguesa | \u00edcono+t\u00edtulo centrado | avatar). *\/\n            .pvf-sidebar{width:auto!important;padding:0}\n            .pvf-sidebar-inner{background:transparent;box-shadow:none;border-radius:0}\n            .pvf-collapse-toggle{display:none}\n            .pvf-nav-body{padding:0}\n            .pvf-nav-label{display:none}\n            .pvf-nav{display:none;flex-direction:column}\n            \/* Bug real: el bloque de usuario del pie del sidebar\n               (.pvf-sidebar-user-menu, avatar+nombre+\"...\") nunca se ocultaba\n               en m\u00f3vil \u2014 con el \u00edcono de colapsar y el men\u00fa ya en display:none\n               era el \u00daNICO hijo visible que le quedaba al sidebar, as\u00ed que el\n               contenedor segu\u00eda ocupando ancho\/alto real (flotando vac\u00edo\n               arriba, con la tarjeta de usuario abajo) y empujaba el\n               contenido principal a una columna angosta con scroll propio.\n               pv-nav sigue viviendo DENTRO de .pvf-sidebar y aparece como\n               volante fijo al abrir la hamburguesa (#pvf-nav-toggle:checked),\n               as\u00ed que el sidebar no puede llevar display:none directo \u2014 hay\n               que vaciarlo de contenido visible en vez de ocultarlo entero. *\/\n            .pvf-sidebar-user-menu{display:none}\n            #pvf-nav-toggle:checked ~ .pvf-shell .pvf-nav{\n                display:flex;position:fixed;top:0;left:0;bottom:0;width:240px;max-width:80vw;\n                background:#fff;z-index:2000;padding:16px;margin:0;overflow-y:auto;\n                box-shadow:0 0 30px rgba(0,0,0,.2);animation:pvf-nav-in .18s ease\n            }\n            #pvf-nav-toggle:checked ~ .pvf-shell .pvf-nav-backdrop{\n                \/* z-index arriba de .pvf-bottomnav (1800) para que la\n                   aten\u00fae tambi\u00e9n \u2014 si no, la barra inferior se quedaba\n                   encendida y clickeable por encima del fondo oscuro\n                   mientras el volante de \"M\u00e1s\" estaba abierto. *\/\n                display:block;position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:1900;cursor:pointer\n            }\n            @keyframes pvf-nav-in{from{transform:translateX(-100%)}to{transform:translateX(0)}}\n            .pvf-topbar-global{height:auto;padding:12px 14px;margin:0;border-radius:0;box-shadow:none;border-bottom:1px solid var(--pv-border);position:relative;justify-content:space-between}\n            .pvf-body-row{padding:0;gap:0}\n            \/* padding-bottom extra para que el contenido no quede tapado\n               detr\u00e1s de .pvf-bottomnav, que es position:fixed y no le\n               \"resta\" espacio real al documento por su cuenta. *\/\n            .pvf-main{padding:14px 14px 90px 14px}\n            .pvf-topbar-title{font-size:16px}\n            .pvf-topbar-icono{width:26px;height:26px;border-radius:7px}\n            .pvf-search-kbd{display:none}\n            .pvf-breadcrumb{display:none}\n            \/* Modelo \"E\": hamburguesa a la izquierda, \u00edcono+t\u00edtulo centrados\n               (ocupando el espacio del medio), avatar solo a la derecha. El\n               buscador, el nombre de la empresa y su separador se ocultan\n               para no verse cargado. *\/\n            .pvf-hamburger-topbar{display:flex}\n            \/* .pvf-topbar-left tiene display:none como base (l\u00ednea 86, pensado\n               solo para desktop) \u2014 sin display:flex expl\u00edcito ac\u00e1, el resto de\n               estas propiedades (flex\/gap\/justify-content) no hac\u00edan nada y\n               el \u00edcono+t\u00edtulo completo se quedaba invisible en todo momento\n               en m\u00f3vil.\n               Centrado real: con position:absolute + left:50%\/translateX\n               queda centrado respecto a TODA la barra, sin importar que la\n               hamburguesa y el bot\u00f3n de Divisas tengan anchos distintos \u2014\n               si en cambio se centrara \"dentro de su propio espacio\" (el\n               flex:1 que quedaba entre ambos), el t\u00edtulo se ve corrido hacia\n               un lado apenas esos dos elementos no miden lo mismo. Los\n               32px\/85px son el ancho aproximado de hamburguesa y bot\u00f3n de\n               Divisas \u2014 el max-width evita que el t\u00edtulo choque contra\n               cualquiera de los dos si el nombre de la pantalla es largo. *\/\n            .pvf-topbar-left{display:flex;position:absolute;left:calc(50% - 12px);top:50%;transform:translate(-50%,-50%);justify-content:center;gap:8px;min-width:0;max-width:calc(100% - 170px);pointer-events:none}\n            .pvf-topbar-left > div{min-width:0}\n            .pvf-topbar-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n            .pvf-search{display:none}\n            .pvf-topbar-empresa,.pvf-topbar-divider{display:none}\n            \/* La franja de monedas y los botones r\u00e1pidos compiten por la\n               misma fila que hamburguesa+t\u00edtulo si se deja que el flex-wrap\n               los acomode \"como quepan\" \u2014 en la pr\u00e1ctica el navegador los\n               empuja a la primera fila y el t\u00edtulo del panel desaparece\n               apretado a 0px. Forz\u00e1ndolos a flex-basis:100% cada uno cae en\n               su propia fila, siempre, sin importar cu\u00e1ntas monedas o\n               botones haya. *\/\n            \/* En m\u00f3vil la franja de pastillas del ENCABEZADO se apaga (el\n               bot\u00f3n .pvf-divisa-menu la reemplaza ah\u00ed) \u2014 el selector va\n               calzado con .pvf-topbar-global a prop\u00f3sito para que esto NO\n               le pegue a la misma franja de divisas cuando aparece dentro\n               de otras pantallas (Bancos, Gastos, Nuevo Pedido...), que\n               tienen que seguir vi\u00e9ndose igual que siempre. *\/\n            .pvf-topbar-global .pv-moneda-switches{display:none}\n            .pvf-divisa-menu{display:block}\n            \/* El logo del encabezado es cosa de escritorio \u2014 en m\u00f3vil ya est\u00e1\n               el \u00edcono+t\u00edtulo del m\u00f3dulo (.pvf-topbar-left) cumpliendo ese\n               rol de \"marca\", y no hay espacio para los dos a la vez. *\/\n            .pvf-topbar-logo{display:none}\n            .pvf-topbar-user{flex:0 0 100%;order:4;justify-content:flex-start}\n            \/* El bot\u00f3n de Divisas S\u00cd cabe en la misma fila que hamburguesa+\n               t\u00edtulo (a diferencia de la franja de pastillas vieja) \u2014 solo\n               se achica un poco para dejarle m\u00e1s aire al t\u00edtulo, que ya\n               tiene su propio elipsis si no alcanza. *\/\n            .pvf-divisa-btn{padding:5px 9px 5px 5px;gap:6px}\n            .pvf-divisa-btn-icono{width:22px;height:22px}\n            .pvf-divisa-btn-icono svg{width:12px!important;height:12px!important}\n            .pvf-divisa-btn-texto small{display:none}\n            .pvf-divisa-dropdown{min-width:210px}\n            \/* En el modelo, la esquina del usuario es solo el c\u00edrculo \u2014\n               sin nombre\/rol ni flecha de despliegue al lado. *\/\n            .pvf-user-texto{display:none}\n            .pvf-user-menu summary > svg{display:none}\n            \/* Los 2 accesos r\u00e1pidos (Nuevo Pedido \/ Registrar Gasto) ya NO\n               viven en el encabezado en m\u00f3vil \u2014 se mudaron a la barra\n               inferior fija (.pvf-bottomnav, m\u00e1s abajo), que es donde el\n               pulgar los alcanza sin estirarse. El encabezado en m\u00f3vil\n               queda solo con hamburguesa + t\u00edtulo, sin ese segundo rengl\u00f3n\n               de botones\/franja de monedas compitiendo por espacio. *\/\n            .pvf-topbar-fecha,.pvf-topbar-user{display:none}\n            \/* Bug real: el checkbox #pvf-sidebar-collapse recuerda el modo\n               \"solo \u00edconos\" del sidebar de escritorio (localStorage) \u2014 esa\n               preferencia no tiene nada que ver con el volante m\u00f3vil, pero\n               las reglas de colapso desktop igual aplican aqu\u00ed y dejaban el\n               men\u00fa m\u00f3vil sin texto, solo con los \u00edconos. Se fuerza a que el\n               men\u00fa m\u00f3vil SIEMPRE muestre texto sin importar ese checkbox. *\/\n            .pvf-nav a,.pvf-nav-group-label{justify-content:flex-start!important;padding:10px 14px!important}\n            .pvf-nav a span:not(.pvf-nav-icono),.pvf-nav-group-label span:not(.pvf-nav-icono){display:inline!important}\n            .pvf-nav-chevron{display:flex!important}\n            .pvf-nav-group:has(.pvf-nav-group-toggle:checked) .pvf-nav-group-items{display:flex!important;position:static!important;margin:2px 8px 6px 34px!important;box-shadow:none!important;border:none!important;background:none!important}\n            \/* Cualquier m\u00f3dulo con una fila\/grilla m\u00e1s ancha que la pantalla\n               (cat\u00e1logo de Nuevo Pedido, filtros con muchos campos, etc.)\n               arrastraba TODA la p\u00e1gina de lado a lado en vez de quedarse\n               contenido \u2014 esto la bloquea a nivel del contenedor principal;\n               lo que se pase de ancho ahora se recorta o scrollea por su\n               cuenta, nunca la p\u00e1gina completa. *\/\n            .pvf-shell,.pvf-body-row,.pvf-main{overflow-x:hidden}\n            .pvf-bottomnav{display:flex}\n        }\n        @media print{\n            .pvf-sidebar{display:none!important}\n            .pvf-shell{position:static;box-shadow:none;display:block;width:auto;margin:0}\n            body:has(.pvf-shell){overflow:visible}\n        }\n    <\/style>\t\t<div class=\"elementor-shortcode\">    <div class=\"pvf-login-stage\">\n        <div class=\"pvf-login-shell pvf-login-shell-solo\">\n            <div class=\"pvf-login-formside\">\n                <div class=\"pvf-login-head\" style=\"text-align:center\">\n                                        <img decoding=\"async\" src=\"https:\/\/sistemaresisven.com\/wp-content\/uploads\/2026\/07\/logo-para-pagina.png\" alt=\"\" class=\"pvf-login-logo-solo\">\n                                        <div class=\"pvf-login-eyebrow\">Bienvenido de nuevo<\/div>\n                    <h2>Iniciar sesi\u00f3n<\/h2>\n                    <p>Ingres\u00e1 tus datos para entrar al panel.<\/p>\n                <\/div>\n\n                \n                <form method=\"post\" action=\"https:\/\/sistemaresisven.com\/wp-login.php\">\n                    <div class=\"pvf-login-campo\">\n                        <label for=\"user_login\">Usuario<\/label>\n                        <div class=\"pvf-login-campo-input\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21a8 8 0 0 0-16 0\"\/><circle cx=\"12\" cy=\"7\" r=\"4\"\/><\/svg>\n                            <input type=\"text\" name=\"log\" id=\"user_login\" placeholder=\"tu.usuario\" autocomplete=\"username\" required autofocus>\n                        <\/div>\n                    <\/div>\n                    <div class=\"pvf-login-campo\">\n                        <label for=\"user_pass\">Contrase\u00f1a<\/label>\n                        <div class=\"pvf-login-campo-input\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg>\n                            <input type=\"password\" name=\"pwd\" id=\"user_pass\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\" autocomplete=\"current-password\" required>\n                            <span class=\"pvf-login-toggle-eye\" data-pv-toggle-pass=\"user_pass\">\n                                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n                            <\/span>\n                        <\/div>\n                    <\/div>\n\n                    <div class=\"pvf-login-fila\">\n                        <label class=\"pvf-login-recordar\"><input type=\"checkbox\" name=\"rememberme\" value=\"forever\" checked> Recordarme<\/label>\n                        <a class=\"pvf-login-olvido\" href=\"https:\/\/sistemaresisven.com\/wp-login.php?action=lostpassword&#038;redirect_to=https%3A%2F%2Fsistemaresisven.com%2Findex.php%3Frest_route%3D%252Fwp%252Fv2%252Fpages%252F5\">\u00bfOlvidaste tu contrase\u00f1a?<\/a>\n                    <\/div>\n\n                    <input type=\"hidden\" name=\"redirect_to\" value=\"https:\/\/sistemaresisven.com\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F5\">\n                    <input type=\"hidden\" name=\"testcookie\" value=\"1\">\n\n                    <button class=\"pvf-login-btn\" type=\"submit\" id=\"wp-submit\">\n                        Entrar\n                        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg>\n                    <\/button>\n                <\/form>\n\n                                <div class=\"pvf-login-foot\">\u00bfProblemas para entrar? <a href=\"mailto:admin@sistemaresisven.com\">Contact\u00e1 al administrador<\/a><\/div>\n                \n                <div class=\"pvf-login-seguridad\">\n                    <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 11l3 3L22 4\"\/><path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\"\/><\/svg>\n                    Conexi\u00f3n segura\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    <script>\n    document.addEventListener( 'click', function( e ) {\n        var toggle = e.target.closest ? e.target.closest( '[data-pv-toggle-pass]' ) : null;\n        if ( ! toggle ) return;\n        var campo = document.getElementById( toggle.getAttribute( 'data-pv-toggle-pass' ) );\n        if ( campo ) campo.type = ( campo.type === 'password' ) ? 'text' : 'password';\n    } );\n    <\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-5","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sistemaresisven.com\/index.php?rest_route=\/wp\/v2\/pages\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sistemaresisven.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sistemaresisven.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/sistemaresisven.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5"}],"version-history":[{"count":0,"href":"https:\/\/sistemaresisven.com\/index.php?rest_route=\/wp\/v2\/pages\/5\/revisions"}],"wp:attachment":[{"href":"https:\/\/sistemaresisven.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}