*{box-sizing:border-box;margin:0;padding:0}body{color:#1a1d23;background:#f5f6fa;min-height:100vh;font-family:Inter,sans-serif;font-size:14px}.app-shell{min-height:100vh;display:flex}.sidebar{z-index:100;background:#fff;border-right:1px solid #e5e7eb;flex-direction:column;width:220px;height:100vh;display:flex;position:fixed;top:0;left:0}.sidebar-brand{border-bottom:1px solid #f3f4f6;align-items:center;gap:10px;padding:20px 18px 16px;display:flex}.sidebar-brand-icon{background:#1a56db;border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;width:36px;height:36px;display:flex}.sidebar-brand-icon i{color:#fff;font-size:18px}.sidebar-brand-text h2{color:#111827;font-size:14px;font-weight:600;line-height:1.2}.sidebar-brand-text p{color:#9ca3af;margin-top:1px;font-size:11px}.sidebar-nav{flex-direction:column;flex:1;gap:2px;padding:12px 10px;display:flex}.nav-item{color:#6b7280;cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;align-items:center;gap:10px;width:100%;padding:9px 12px;font-size:13px;font-weight:500;text-decoration:none;transition:all .15s;display:flex}.nav-item:hover{color:#374151;background:#f3f4f6}.nav-item.active{color:#1a56db;background:#eff6ff}.nav-item i{flex-shrink:0;font-size:17px}.nav-section-label{color:#d1d5db;letter-spacing:.8px;text-transform:uppercase;padding:14px 12px 4px;font-size:10px;font-weight:600}.sidebar-footer{border-top:1px solid #f3f4f6;padding:14px 10px}.main-content{flex:1;min-width:0;margin-left:220px;padding:28px}.page{max-width:960px;margin:0 auto}.header{justify-content:space-between;align-items:center;margin-bottom:24px;display:flex}.brand{align-items:center;gap:12px;display:flex}.brand-icon{background:#1a56db;border-radius:10px;justify-content:center;align-items:center;width:40px;height:40px;display:flex}.brand-icon.red{background:#dc2626}.brand-icon i{color:#fff;font-size:20px}.brand h1{color:#111827;font-size:18px;font-weight:600}.brand p{color:#6b7280;margin-top:1px;font-size:12px}.header-right{align-items:center;gap:10px;display:flex}.chip{color:#6b7280;background:#fff;border:1px solid #e5e7eb;border-radius:8px;align-items:center;gap:6px;padding:7px 12px;font-size:13px;display:flex}.btn-export{color:#374151;cursor:pointer;background:#fff;border:1px solid #e5e7eb;border-radius:8px;align-items:center;gap:6px;padding:7px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:500;transition:border-color .15s,color .15s;display:flex}.btn-export:hover{color:#1a56db;border-color:#1a56db}.banner{color:#92400e;background:#fef3c7;border:1px solid #fcd34d;border-radius:8px;align-items:center;gap:8px;margin-bottom:14px;padding:8px 14px;font-size:12px;display:none}.banner.show{display:flex}.meta-row{background:#fff;border:1px solid #e5e7eb;border-radius:12px;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:18px;padding:12px 18px;display:flex}.meta-row label{color:#6b7280;white-space:nowrap;font-size:13px}.meta-row input{color:#111827;border:1.5px solid #e5e7eb;border-radius:7px;outline:none;width:120px;padding:7px 10px;font-family:Inter,sans-serif;font-size:13px;transition:border-color .15s}.meta-row input:focus{border-color:#1a56db}.btn-set{color:#374151;cursor:pointer;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:7px;padding:7px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:500;transition:background .15s}.btn-set:hover{background:#e5e7eb}.filtro-fecha-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;margin-bottom:18px;padding:12px 18px}.filtro-fecha-top{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.filtro-fecha-label{color:#9ca3af;white-space:nowrap;align-items:center;gap:5px;font-size:12px;font-weight:500;display:flex}.periodo-chips{flex-wrap:wrap;gap:6px;display:flex}.periodo-chip{color:#6b7280;cursor:pointer;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:20px;padding:5px 13px;font-family:Inter,sans-serif;font-size:12px;font-weight:500;transition:all .15s}.periodo-chip:hover{color:#374151;background:#eff6ff;border-color:#93c5fd}.periodo-chip.active{color:#1a56db;background:#eff6ff;border-color:#1a56db}.rango-custom{flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;display:none}.rango-custom.visible{display:flex}.rango-custom label{color:#9ca3af;white-space:nowrap;font-size:12px;font-weight:500}.rango-custom input[type=date]{color:#111827;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;padding:6px 10px;font-family:Inter,sans-serif;font-size:13px;transition:border-color .15s}.rango-custom input[type=date]:focus{background:#fff;border-color:#1a56db}.rango-sep{color:#d1d5db;font-size:13px}.btn-aplicar-rango{color:#fff;cursor:pointer;background:#1a56db;border:none;border-radius:8px;align-items:center;gap:5px;padding:7px 14px;font-family:Inter,sans-serif;font-size:12px;font-weight:600;transition:background .15s;display:flex}.btn-aplicar-rango:hover{background:#1648c8}.filtro-activo-info{color:#6b7280;align-items:center;gap:5px;margin-top:8px;font-size:12px;display:flex}.filtro-activo-info strong{color:#1a56db}.kpi-row{grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px;display:grid}.kpi-row.tres{grid-template-columns:repeat(3,1fr)}.kpi{background:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:16px 18px}.kpi-label{color:#9ca3af;align-items:center;gap:5px;margin-bottom:6px;font-size:12px;font-weight:500;display:flex}.kpi-value{color:#111827;font-size:22px;font-weight:600;line-height:1}.kpi-value.green{color:#059669}.kpi-value.amber{color:#d97706}.kpi-value.blue{color:#1a56db}.kpi-value.red{color:#dc2626}.kpi-sub{color:#d1d5db;margin-top:4px;font-size:11px}.progress-strip{background:#fff;border:1px solid #e5e7eb;border-radius:12px;margin-bottom:18px;padding:16px 20px}.progress-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.progress-title{color:#374151;font-size:13px;font-weight:500}.progress-pct{color:#1a56db;font-size:20px;font-weight:600}.progress-bg{background:#f3f4f6;border-radius:6px;height:10px;overflow:hidden}.progress-fill{border-radius:6px;height:100%;transition:width .7s cubic-bezier(.4,0,.2,1),background .3s}.progress-labels{color:#9ca3af;justify-content:space-between;margin-top:6px;font-size:11px;display:flex}.form-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;margin-bottom:18px;padding:22px 24px}.form-card-title{color:#111827;align-items:center;gap:8px;margin-bottom:16px;font-size:15px;font-weight:600;display:flex}.form-card-title i{color:#1a56db;font-size:17px}.serv-label,.cat-label{color:#6b7280;margin-bottom:8px;font-size:12px;font-weight:500}.serv-grid{grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:10px;display:grid}.cat-grid{grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px;display:grid}.serv-btn,.cat-btn{cursor:pointer;text-align:center;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:10px;width:100%;padding:10px 6px;font-family:Inter,sans-serif;transition:all .15s}.serv-btn:hover,.cat-btn:hover{background:#eff6ff;border-color:#93c5fd}.serv-btn.active,.cat-btn.active{background:#eff6ff;border-color:#1a56db}.serv-btn i,.cat-btn i{color:#9ca3af;margin-bottom:4px;font-size:20px;transition:color .15s;display:block}.serv-btn.active i,.cat-btn.active i{color:#1a56db}.serv-btn span,.cat-btn span{color:#6b7280;font-size:11px;font-weight:500;line-height:1.2;transition:color .15s;display:block}.serv-btn.active span,.cat-btn.active span{color:#1a56db}.otros-row{align-items:center;gap:8px;margin-bottom:16px;display:none}.otros-row.visible{display:flex}.otros-row input{color:#111827;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;flex:1;padding:8px 12px;font-family:Inter,sans-serif;font-size:13px;transition:border-color .15s}.otros-row input:focus{background:#fff;border-color:#1a56db}.fields-row{grid-template-columns:1fr 1fr 1fr auto;align-items:end;gap:12px;display:grid}.field{flex-direction:column;gap:5px;display:flex}.field input,.field select{color:#111827;background:#fff;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;width:100%;padding:9px 12px;font-family:Inter,sans-serif;font-size:14px;transition:border-color .15s}.field input:focus,.field select:focus{border-color:#1a56db;box-shadow:0 0 0 3px #1a56db14}.field input::placeholder{color:#d1d5db}.btn-add{color:#fff;cursor:pointer;white-space:nowrap;background:#1a56db;border:none;border-radius:8px;justify-content:center;align-items:center;gap:6px;height:40px;padding:10px 20px;font-family:Inter,sans-serif;font-size:14px;font-weight:600;transition:background .15s,transform .1s;display:flex}.btn-add:hover{background:#1648c8}.btn-add:active{transform:scale(.97)}.btn-add:disabled{cursor:not-allowed;background:#9ca3af}.form-error{color:#dc2626;background:#fef2f2;border:1px solid #fecaca;border-radius:7px;margin-top:10px;padding:8px 12px;font-size:12px;display:none}.form-error.show{display:block}.proy-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;margin-bottom:18px;padding:16px 20px}.proy-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.proy-title{color:#111827;align-items:center;gap:7px;font-size:14px;font-weight:600;display:flex}.proy-title i{color:#6b7280;font-size:15px}.proy-add-row{gap:8px;margin-bottom:12px;display:flex}.proy-add-row input{color:#111827;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;flex:1;padding:8px 12px;font-family:Inter,sans-serif;font-size:13px;transition:border-color .15s}.proy-add-row input:focus{background:#fff;border-color:#1a56db}.btn-proy-add{color:#fff;cursor:pointer;white-space:nowrap;background:#1a56db;border:none;border-radius:8px;align-items:center;gap:5px;padding:8px 14px;font-family:Inter,sans-serif;font-size:13px;font-weight:600;transition:background .15s;display:flex}.btn-proy-add:hover{background:#1648c8}.proy-chips{flex-wrap:wrap;gap:6px;display:flex}.proy-chip{color:#374151;background:#f3f4f6;border-radius:20px;align-items:center;gap:5px;padding:5px 10px;font-size:12px;font-weight:500;display:inline-flex}.proy-chip.general{color:#1a56db;background:#eff6ff}.btn-proy-del{cursor:pointer;color:#d1d5db;background:0 0;border:none;padding:0 0 0 4px;font-size:12px;line-height:1;transition:color .15s}.btn-proy-del:hover{color:#ef4444}.filtro-row{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.filtro-label{color:#9ca3af;align-items:center;gap:5px;font-size:12px;font-weight:500;display:flex}.filtro-chips{flex-wrap:wrap;gap:6px;display:flex}.filtro-chip{color:#6b7280;cursor:pointer;background:#fafafa;border:1.5px solid #e5e7eb;border-radius:20px;padding:4px 12px;font-family:Inter,sans-serif;font-size:12px;font-weight:500;transition:all .15s}.filtro-chip:hover{color:#374151;border-color:#93c5fd}.filtro-chip.active{color:#1a56db;background:#eff6ff;border-color:#1a56db}.field-proyecto{margin-bottom:14px}.field-proyecto label{color:#6b7280;margin-bottom:5px;font-size:12px;font-weight:500;display:block}.combobox-wrap{position:relative}.combobox-input{color:#111827;cursor:pointer;background:#fff;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;width:100%;padding:9px 36px 9px 12px;font-family:Inter,sans-serif;font-size:13px;transition:border-color .15s}.combobox-input:focus{border-color:#1a56db;box-shadow:0 0 0 3px #1a56db14}.combobox-arrow{color:#9ca3af;pointer-events:none;font-size:14px;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.combobox-dropdown{z-index:200;background:#fff;border:1.5px solid #e5e7eb;border-radius:10px;max-height:200px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow:hidden auto;box-shadow:0 4px 16px #00000014}.combobox-option{color:#374151;cursor:pointer;align-items:center;gap:7px;padding:9px 14px;font-size:13px;transition:background .1s;display:flex}.combobox-option:hover,.combobox-option.selected{color:#1a56db;background:#eff6ff}.combobox-option i{color:#9ca3af;font-size:13px}.combobox-option.selected i{color:#1a56db}.combobox-empty{color:#9ca3af;text-align:center;padding:10px 14px;font-size:12px}.table-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;margin-bottom:18px;overflow:hidden}.table-head{border-bottom:1px solid #f3f4f6;justify-content:space-between;align-items:center;padding:14px 20px;display:flex}.table-title{color:#111827;align-items:center;gap:6px;font-size:14px;font-weight:600;display:flex}.table-title i{color:#6b7280}.table-actions{align-items:center;gap:8px;display:flex}.badge{color:#6b7280;background:#f3f4f6;border-radius:20px;padding:3px 10px;font-size:12px}table{border-collapse:collapse;width:100%}thead th{text-align:left;color:#9ca3af;letter-spacing:.5px;text-transform:uppercase;background:#fafafa;border-bottom:1px solid #f3f4f6;padding:9px 16px;font-size:11px;font-weight:600}tbody tr{border-bottom:1px solid #f9fafb;transition:background .1s}tbody tr:last-child{border-bottom:none}tbody tr:hover{background:#fafafa}td{color:#374151;padding:11px 16px;font-size:13px}.td-cliente{color:#111827;font-weight:500}.pill{border-radius:20px;align-items:center;gap:5px;padding:3px 9px;font-size:12px;font-weight:500;display:inline-flex}.pill-proy{color:#6b7280;background:#f3f4f6;border-radius:20px;align-items:center;gap:4px;padding:3px 8px;font-size:11px;display:inline-flex}.td-monto{color:#059669;font-weight:600}.td-monto-red{color:#dc2626;font-weight:600}.btn-del{cursor:pointer;color:#d1d5db;background:0 0;border:none;border-radius:6px;padding:4px 6px;font-size:15px;transition:color .15s,background .15s}.btn-del:hover{color:#ef4444;background:#fef2f2}.btn-edit{cursor:pointer;color:#93c5fd;background:0 0;border:none;border-radius:6px;padding:4px 6px;font-size:15px;transition:color .15s,background .15s}.btn-edit:hover{color:#1a56db;background:#eff6ff}.empty{text-align:center;color:#9ca3af;padding:40px}.empty i{color:#d1d5db;margin-bottom:10px;font-size:36px;display:block}.empty p{font-size:13px}.empty small{color:#d1d5db;margin-top:4px;font-size:12px;display:block}.charts-row{grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px;display:grid}.chart-card{background:#fff;border:1px solid #e5e7eb;border-radius:14px;padding:20px}.chart-title{color:#374151;align-items:center;gap:6px;margin-bottom:14px;font-size:13px;font-weight:600;display:flex}.chart-title i{color:#9ca3af}.chart-wrap{height:200px;position:relative}.legend{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.legend-item{color:#6b7280;align-items:center;gap:5px;font-size:11px;display:flex}.legend-dot{border-radius:2px;flex-shrink:0;width:8px;height:8px}.modal-overlay{z-index:500;background:#00000059;justify-content:center;align-items:center;padding:20px;display:none;position:fixed;inset:0}.modal-overlay.open{display:flex}.modal{background:#fff;border-radius:16px;width:100%;max-width:480px;padding:28px;box-shadow:0 8px 32px #0000001f}.modal-title{color:#111827;align-items:center;gap:8px;margin-bottom:20px;font-size:16px;font-weight:600;display:flex}.modal-title i{color:#1a56db}.modal-fields{grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;display:grid}.modal-field label{color:#6b7280;margin-bottom:5px;font-size:12px;font-weight:500;display:block}.modal-field input,.modal-field select{color:#111827;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;width:100%;padding:9px 12px;font-family:Inter,sans-serif;font-size:13px;transition:border-color .15s}.modal-field input:focus,.modal-field select:focus{border-color:#1a56db}.modal-cat-grid{grid-template-columns:repeat(4,1fr);gap:6px;margin-bottom:14px;display:grid}.modal-otros{margin-bottom:12px;display:none}.modal-otros.visible{display:block}.modal-otros input{color:#111827;border:1.5px solid #e5e7eb;border-radius:8px;outline:none;width:100%;padding:9px 12px;font-family:Inter,sans-serif;font-size:13px}.modal-otros input:focus{border-color:#1a56db}.modal-btns{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.btn-cancel{color:#374151;cursor:pointer;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:8px;padding:9px 18px;font-family:Inter,sans-serif;font-size:13px;font-weight:500}.btn-cancel:hover{background:#e5e7eb}.btn-save{color:#fff;cursor:pointer;background:#1a56db;border:none;border-radius:8px;align-items:center;gap:6px;padding:9px 18px;font-family:Inter,sans-serif;font-size:13px;font-weight:600;transition:background .15s;display:flex}.btn-save:hover{background:#1648c8}.btn-save:disabled{cursor:not-allowed;background:#9ca3af}.toast-wrap{z-index:999;pointer-events:none;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}.toast{color:#fff;opacity:0;pointer-events:none;white-space:nowrap;background:#111827;border-radius:10px;padding:10px 18px;font-size:13px;font-weight:500;transition:all .25s;transform:translateY(12px)}.toast.show{opacity:1;transform:translateY(0)}.toast.success{background:#065f46}.toast.warn{background:#92400e}.toast.err{background:#991b1b}.spinner{border:2px solid #fff6;border-top-color:#fff;border-radius:50%;width:14px;height:14px;animation:.6s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}@keyframes rowIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}.row-in{animation:.2s both rowIn}@media (width<=900px){.sidebar{width:60px}.sidebar-brand-text,.nav-item span,.nav-section-label{display:none}.sidebar-brand{justify-content:center;padding:16px 0}.nav-item{justify-content:center;padding:10px}.main-content{margin-left:60px}}@media (width<=700px){.kpi-row{grid-template-columns:repeat(2,1fr)}.serv-grid,.cat-grid{grid-template-columns:repeat(3,1fr)}.fields-row{grid-template-columns:1fr 1fr}.charts-row{grid-template-columns:1fr}}.app-root{--bg-body:#f1f5f9;--bg-surface:#fff;--bg-surface-hover:#f8fafc;--bg-surface-alt:#f8fafc;--text-main:#0f172a;--text-muted:#64748b;--text-light:#94a3b8;--border-light:#e2e8f0;--border-dark:#cbd5e1;--primary:#4f46e5;--primary-hover:#4338ca;--primary-light:#e0e7ff;--success-bg:#dcfce7;--success-text:#166534;--success-border:#bbf7d0;--warning-bg:#fef9c3;--warning-text:#854d0e;--warning-border:#fef08a;--danger-bg:#fee2e2;--danger-text:#991b1b;--danger-border:#fecaca;--info-bg:#dbeafe;--info-text:#1e40af;--info-border:#bfdbfe;--draft-bg:#f1f5f9;--draft-text:#475569;--draft-border:#e2e8f0;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-pill:9999px;--shadow-sm:0 1px 2px 0 #0000000d;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;color:var(--text-main);background-color:var(--bg-body);box-sizing:border-box;justify-content:center;align-items:center;min-height:100vh;padding:10px;font-family:Inter,system-ui,sans-serif;font-size:14px;display:flex}.app-root *,.app-root :before,.app-root :after{box-sizing:border-box}.app{background:var(--bg-surface);border-radius:var(--radius-lg);width:100%;max-width:1800px;height:96vh;min-height:700px;box-shadow:var(--shadow-lg);border:1px solid var(--border-light);flex-direction:column;display:flex;overflow:hidden}.main{flex:1;display:flex;overflow:hidden}.topbar{background:var(--bg-surface);border-bottom:1px solid var(--border-light);z-index:10;flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.topbar-left{align-items:center;gap:16px;display:flex}.topbar-right{align-items:center;gap:12px;display:flex}.page-title{color:var(--text-main);letter-spacing:-.01em;margin:0;font-size:18px;font-weight:600}.sep-v{background:var(--border-light);width:1px;height:24px;margin:0 4px}.app button{cursor:pointer;font-family:inherit;transition:all .2s}.btn{border:1px solid var(--border-dark);border-radius:var(--radius-md);background:var(--bg-surface);color:var(--text-main);box-shadow:var(--shadow-sm);align-items:center;gap:6px;padding:8px 16px;font-size:13px;font-weight:500;display:inline-flex}.btn:hover{background:var(--bg-surface-hover);border-color:var(--text-muted)}.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}.btn-primary:hover{background:var(--primary-hover);border-color:var(--primary-hover)}.back-btn{border-radius:var(--radius-md);color:var(--text-muted);background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:6px 12px;font-size:14px;font-weight:500;display:flex}.back-btn:hover{background:var(--bg-surface-hover);color:var(--text-main)}.add-btn{color:var(--primary);border:1px dashed var(--border-dark);border-radius:var(--radius-sm);background:0 0;align-items:center;gap:6px;margin-top:8px;padding:8px 16px;font-size:13px;font-weight:500;display:inline-flex}.add-btn:hover{background:var(--primary-light);border-color:var(--primary)}.add-btn.secondary{color:var(--text-muted)}.add-btn.secondary:hover{background:var(--bg-surface-hover);border-color:var(--text-muted);color:var(--text-main)}.del-btn{color:var(--text-light);border-radius:var(--radius-sm);background:0 0;border:none;padding:6px;display:inline-flex}.del-btn:hover{color:var(--danger-text);background:var(--danger-bg)}.role-group{background:var(--bg-surface-alt);border-radius:var(--radius-md);border:1px solid var(--border-light);padding:3px;display:flex}.role-btn{border-radius:var(--radius-sm);color:var(--text-muted);background:0 0;border:none;padding:6px 14px;font-size:12px;font-weight:500}.role-btn.active{background:var(--bg-surface);color:var(--primary);box-shadow:var(--shadow-sm)}.status-badge{border-radius:var(--radius-pill);text-transform:uppercase;letter-spacing:.05em;align-items:center;padding:4px 10px;font-size:11px;font-weight:600;display:inline-flex}.status-borrador{background:var(--draft-bg);color:var(--draft-text);border:1px solid var(--draft-border)}.status-revision{background:var(--warning-bg);color:var(--warning-text);border:1px solid var(--warning-border)}.status-aprobada{background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-border)}.status-enviada{background:var(--info-bg);color:var(--info-text);border:1px solid var(--info-border)}.approved-tag{border-radius:var(--radius-sm);text-transform:uppercase;background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-border);align-items:center;gap:4px;margin-left:8px;padding:4px 8px;font-size:11px;font-weight:600;display:inline-flex}#viewList{background:var(--bg-surface);flex:1;overflow-y:auto}.list-header{border-bottom:1px solid var(--border-light);background:var(--bg-surface-alt);justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.list-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:14px;font-weight:600}.list-table{border-collapse:collapse;width:100%}.list-table th{color:var(--text-muted);text-align:left;border-bottom:1px solid var(--border-light);background:var(--bg-surface);padding:12px 24px;font-size:12px;font-weight:500;position:sticky;top:0}.list-table td{border-bottom:1px solid var(--border-light);color:var(--text-main);vertical-align:middle;padding:16px 24px;font-size:14px}.list-table tr:hover td{background:var(--bg-surface-hover);cursor:pointer}.client-name{color:var(--text-main);margin-bottom:4px;font-weight:600}.project-name{color:var(--text-muted);font-size:13px}#viewEditor{background:var(--bg-body);flex:1;display:flex;overflow:hidden}.editor{flex-direction:column;flex:1;gap:20px;padding:24px;display:flex;overflow-y:auto}.card{background:var(--bg-surface);border:1px solid var(--border-light);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:20px}.card-header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.card-title{color:var(--text-main);text-transform:uppercase;font-size:14px;font-weight:600}.field-row{gap:16px;margin-bottom:4px;display:flex}.field{flex-direction:column;flex:1;gap:6px;display:flex}.field label{color:var(--text-muted);font-size:12px;font-weight:500}.field input,.items-table input,.items-table select,.labor-input{border:1px solid var(--border-dark);border-radius:var(--radius-sm);color:var(--text-main);background:var(--bg-surface);width:100%;padding:8px 12px;font-family:inherit;font-size:14px;transition:all .2s}.field input:focus,.items-table input:focus,.items-table select:focus,.labor-input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light);outline:none}.items-table{border-collapse:collapse;width:100%;margin-bottom:12px}.items-table th{color:var(--text-muted);text-transform:uppercase;text-align:left;border-bottom:1px solid var(--border-light);padding:0 8px 8px 0;font-size:11px;font-weight:600}.items-table td{vertical-align:middle;border-bottom:1px dashed var(--border-light);padding:12px 8px 12px 0}.items-table tr:last-child td{border-bottom:none}.items-table td input[type=number]{text-align:right;width:100px;font-size:14px}.items-table select{min-width:280px;font-size:14px}.total-cell{text-align:right;color:var(--text-main);font-size:14px;font-weight:600}.custom-name-wrap{flex-direction:column;gap:4px;display:flex}.custom-name-tag{color:var(--primary);text-transform:uppercase;letter-spacing:.03em;font-size:10px;font-weight:600}.labor-row{align-items:center;gap:12px;display:flex}.labor-input-wrap{width:150px;position:relative}.labor-input-wrap span{color:var(--text-muted);position:absolute;top:10px;left:12px}.labor-input-wrap input{padding-left:30px}.extra-cost-block{flex-direction:column;gap:10px;display:flex}.extra-cost-header{justify-content:space-between;align-items:center;display:flex}.extra-cost-name{color:var(--text-main);font-size:13px;font-weight:600}.extra-cost-toggle{color:var(--text-muted);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:12px;display:flex}.extra-cost-toggle input{width:15px;height:15px;accent-color:var(--primary);cursor:pointer}.not-required-tag{border-radius:var(--radius-sm);text-transform:uppercase;background:var(--draft-bg);color:var(--draft-text);border:1px solid var(--draft-border);padding:4px 8px;font-size:11px;font-weight:600}.summary-panel{border-left:1px solid var(--border-light);background:var(--bg-surface);flex-direction:column;flex-shrink:0;gap:16px;width:360px;padding:24px;display:flex;overflow-y:auto}.summary-title{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px;font-size:14px;font-weight:600}.summary-line{color:var(--text-muted);justify-content:space-between;align-items:center;padding:4px 0;font-size:14px;display:flex}.summary-line span:last-child{color:var(--text-main);font-weight:500}.summary-line.total{color:var(--text-main);border-top:1px solid var(--border-light);margin-top:4px;padding-top:12px;font-size:15px;font-weight:600}.summary-line.total span:last-child{font-size:16px}.separator{background:var(--border-light);height:1px;margin:4px 0}.margin-block{background:var(--bg-surface-alt);border:1px solid var(--border-light);border-radius:var(--radius-md);text-align:center;margin:8px 0;padding:16px}.margin-label{color:var(--text-muted);text-transform:uppercase;margin-bottom:8px;font-size:12px;font-weight:600}.margin-values{justify-content:center;align-items:baseline;gap:12px;display:flex}.margin-big{font-size:20px;font-weight:600}.c-ok{color:var(--success-text)}.bg-c-ok{background:var(--success-bg);color:var(--success-text)}.c-danger{color:var(--danger-text)}.bg-c-danger{background:var(--danger-bg);color:var(--danger-text)}.alert-box{border-radius:var(--radius-md);align-items:flex-start;gap:8px;padding:12px;font-size:13px;line-height:1.4;display:flex}.alert-warning{background:var(--warning-bg);color:var(--warning-text);border:1px solid var(--warning-border)}.alert-success{background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-border)}.flow-steps{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px;display:flex}.flow-step{border-radius:var(--radius-pill);border:1px solid var(--border-light);color:var(--text-muted);background:var(--bg-surface-alt);padding:4px 10px;font-size:11px}.flow-step.active{background:var(--primary-light);color:var(--primary);border-color:var(--primary);font-weight:600}.flow-step.done{background:var(--bg-surface);border-color:var(--border-dark)}.flow-arrow{color:var(--text-light);display:inline-flex}.items-table td,.items-table th{padding:4px 6px!important}.compact-input{text-align:right;background:#fff;transition:all .2s;border:1px solid var(--border-dark)!important;border-radius:4px!important;width:76px!important;height:30px!important;padding:4px 6px!important;font-size:13px!important}.compact-input:focus{outline:none;border-color:var(--primary)!important;box-shadow:0 0 0 2px var(--primary-light)!important}.compact-select{border:1px solid var(--border-dark);background:#fff;border-radius:4px;width:100%;min-width:220px!important;height:30px!important;padding:4px 8px!important;font-size:13px!important}.hl-venta-input{color:var(--info-text)!important;background:#fff!important;border-color:#93c5fd!important;font-weight:700!important}.hl-venta-input:focus{border-color:var(--info-text)!important}.bold-input{color:var(--text-main)!important;width:82px!important;font-weight:700!important}.view-label{color:var(--text-muted);white-space:nowrap;font-size:12px;font-weight:500}.role-wrap{align-items:center;gap:10px;display:flex}.topbar-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:disabled:hover{background:var(--bg-surface);border-color:var(--border-dark)}.btn-toggle-cols{background:var(--bg-surface);border:1px solid var(--border-dark);padding:4px 8px;font-size:12px}.kit-tag{color:#7c3aed;white-space:nowrap;background:#f3e8ff;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.card-title-block{margin-bottom:16px}.card-amount{color:var(--primary);white-space:nowrap;font-size:16px;font-weight:600;display:block}.card-sub{color:var(--text-muted);font-size:11px;display:block}.block-label{text-transform:uppercase;letter-spacing:.6px;color:var(--text-muted);margin:4px 0 6px;font-size:11px;font-weight:600}.labor-header{margin-bottom:8px}.labor-row{flex-wrap:wrap}.separator.spaced{margin:16px 0}.separator.spaced-sm{margin:12px 0}.kit-banner{background:#f5f3ff;border:1px solid #ddd6fe;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.kit-banner-title{color:#5b21b6;align-items:center;gap:6px;margin-bottom:4px;font-size:14px;font-weight:600;display:flex}.kit-banner-text{color:#6b7280;max-width:560px;font-size:12px;line-height:1.5}.items-empty{color:var(--text-muted);padding:14px 2px;font-size:13px}.list-empty{text-align:center;justify-items:center;gap:10px;padding:56px 20px;display:grid}.empty-title{font-size:16px;font-weight:600}.empty-text{color:var(--text-muted);max-width:420px;font-size:13px}.summary-line.with-input{margin-top:8px}.summary-line.total.primary{color:var(--primary)}.adjust-input{text-align:right;border:1px solid var(--border-dark);width:90px;color:var(--text-main);background:#fff;border-radius:4px;padding:2px 6px;font-family:inherit;font-size:14px}.margin-values{flex-wrap:wrap}.margin-badge{border-radius:6px;padding:2px 8px;font-size:15px;font-weight:600}.list-table .cell-strong{font-weight:500}.list-table .cell-margin{font-weight:600}.list-table .cell-muted{color:var(--text-muted)}.items-card-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.items-card-title{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.items-card-total{text-align:right;margin-left:auto}.items-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.scroll-hint{display:none}.items-footer{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.compact-input.qty-input{text-align:center;width:52px!important}.compact-input.full{text-align:left;width:100%!important}.items-table .col-actions{text-align:right;width:30px}.items-table .sticky-1,.items-table .sticky-2{background:var(--bg-surface);z-index:2;position:sticky}.items-table .sticky-1{width:60px;min-width:60px;left:0}.items-table .sticky-2{left:60px;box-shadow:4px 0 6px -4px #0f172a14}.items-table thead th.sticky-1,.items-table thead th.sticky-2{background:var(--bg-surface-alt);z-index:3}.main,#viewList,#viewEditor{min-height:0}@media (width<=1023px){#viewEditor{flex-direction:column;overflow-y:auto}.editor{flex:none;overflow:visible}.summary-panel{border-left:none;border-top:1px solid var(--border-light);flex:none;width:100%;overflow:visible}}@media (width>=1024px) and (width<=1279px){.summary-panel{width:320px}.editor{padding:20px}}@media (width<=767px){.app-root{padding:0;padding-top:env(safe-area-inset-top,0px);padding-right:env(safe-area-inset-right,0px);padding-bottom:env(safe-area-inset-bottom,0px);padding-left:env(safe-area-inset-left,0px);align-items:stretch;min-height:0}.app{width:100%;max-width:none;height:100dvh;min-height:0;box-shadow:none;border:none;border-radius:0}.topbar{flex-direction:column;align-items:stretch;gap:12px;padding:12px 16px}.topbar-left{flex-wrap:wrap;gap:8px 12px;min-width:0}.page-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:16px;overflow:hidden}.topbar-right{flex-direction:column;align-items:stretch;gap:10px}.sep-v,.view-label{display:none}.role-wrap,.role-group{width:100%}.role-group .role-btn{flex:1;padding:8px 6px}.back-btn{padding:6px 8px}.topbar-actions{grid-template-columns:1fr 1fr;gap:8px;width:100%;display:grid}.topbar-actions>.btn{justify-content:center}.topbar-actions>.btn-status,.topbar-actions>.btn:only-child{grid-column:1/-1}.list-header{padding:12px 16px}.list-table thead{display:none}.list-table,.list-table tbody,.list-table tr,.list-table td{width:100%;display:block}.list-table tr{border-bottom:1px solid var(--border-light);padding:14px 16px}.list-table tr:hover{background:var(--bg-surface-hover)}.list-table tr:hover td{background:0 0}.list-table td{border:none;justify-content:space-between;align-items:center;gap:12px;padding:5px 0;font-size:14px;display:flex}.list-table td:before{content:attr(data-label);color:var(--text-muted);font-size:12px}.list-table td.cell-main{padding-bottom:8px;display:block}.list-table td.cell-main:before{content:none}.list-empty{padding:40px 16px}.editor{gap:14px;padding:16px}.card{padding:16px}.card-header{flex-wrap:wrap;gap:8px}.field-row{flex-direction:column;gap:12px}.field{flex:none;width:100%}.field input{font-size:16px}.labor-row{gap:10px}.labor-input-wrap{width:160px}.labor-input{font-size:16px}.kit-banner{flex-direction:column;align-items:stretch}.kit-banner .btn{justify-content:center}.items-card-total{text-align:left;width:100%;margin-left:0}.scroll-hint{color:var(--text-light);margin-bottom:8px;font-size:11px;display:block}.items-footer .add-btn{flex:100%;justify-content:center}.items-table .compact-input{height:38px!important;font-size:16px!important}.items-table .compact-input.qty-input{width:56px!important}.items-table .compact-select{height:38px!important;font-size:14px!important}.items-table .bold-input{width:96px!important}.del-btn{padding:8px}.btn,.add-btn,.back-btn,.role-btn,.btn-toggle-cols{min-height:40px}.summary-panel{padding:16px}.margin-values{flex-direction:column;gap:6px}.margin-big{font-size:18px}.adjust-input{font-size:16px}.extra-cost-toggle{padding:4px 0}}@media (width<=479px){.back-label{display:none}.page-title{font-size:15px}.kit-banner-title{font-size:13px}.card-amount{font-size:15px}}@media (width<=359px){.topbar-actions{grid-template-columns:1fr}}.kp-overlay{z-index:50;background:#0f172a73;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.kp-modal{background:#fff;border-radius:12px;flex-direction:column;width:min(900px,100%);max-height:85vh;display:flex;overflow:hidden;box-shadow:0 20px 50px #0003}.kp-header{border-bottom:1px solid #e2e8f0;flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:14px 18px;display:flex}.kp-header-left{align-items:center;gap:6px;min-width:0;display:flex}.kp-title{color:#0f172a;font-size:15px;font-weight:600}.kp-back,.kp-close{color:#64748b;cursor:pointer;background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:6px;display:inline-flex}.kp-back:hover,.kp-close:hover{color:#0f172a;background:#f1f5f9}.kp-back{display:none}.kp-body{flex:1;min-height:0;display:flex}.kp-left{overscroll-behavior:contain;border-right:1px solid #e2e8f0;flex-shrink:0;width:300px;padding:12px;overflow-y:auto}.kp-right{overscroll-behavior:contain;flex:1;min-width:0;padding:16px;overflow-y:auto}.kp-input{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:6px;outline:none;width:100%;padding:8px 10px;font-family:inherit;font-size:14px;transition:border-color .15s,box-shadow .15s}.kp-input:focus{border-color:#4f46e5;box-shadow:0 0 0 3px #e0e7ff}.kp-search-wrap{margin-bottom:10px;position:relative}.kp-search-icon{color:#94a3b8;pointer-events:none;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.kp-search{padding-left:32px}.kp-cat-title{text-transform:uppercase;letter-spacing:.5px;color:#64748b;margin:10px 0 4px;font-size:11px;font-weight:600}.kp-kit-btn{text-align:left;cursor:pointer;color:#0f172a;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;width:100%;padding:8px 10px;font-family:inherit;font-size:13px;display:flex}.kp-kit-btn:hover{background:#f8fafc}.kp-kit-btn.is-active{background:#eff6ff;border-color:#93c5fd;font-weight:600}.kp-kit-name{overflow-wrap:anywhere;min-width:0}.kp-kit-price{color:#64748b;white-space:nowrap;flex-shrink:0;font-size:12px}.kp-empty-sm{color:#94a3b8;padding:8px 2px;font-size:12px}.kp-save-box{border-top:1px dashed #cbd5e1;margin-top:20px;padding-top:14px}.kp-save-row{gap:8px;display:flex}.kp-save-row .kp-input{flex:1;min-width:0}.kp-empty{color:#64748b;padding:20px;font-size:14px}.kp-kit-title{color:#0f172a;overflow-wrap:anywhere;margin-bottom:12px;font-size:16px;font-weight:600}.kp-section{margin-bottom:12px}.kp-sec-title{color:#475569;margin-bottom:6px;font-size:12px;font-weight:600}.kp-row{align-items:flex-start;gap:10px;padding:3px 0;font-size:13px;display:flex}.kp-row>span:last-child{overflow-wrap:anywhere;min-width:0}.kp-opt-row{cursor:pointer;align-items:flex-start;gap:10px;padding:4px 0;font-size:13px;display:flex}.kp-opt-row input{accent-color:#4f46e5;flex-shrink:0;width:15px;height:15px;margin-top:2px}.kp-opt-row>span:last-child{overflow-wrap:anywhere;min-width:0}.kp-qty{color:#64748b;flex-shrink:0;min-width:28px}.kp-resumen{background:#f8fafc;border-radius:8px;gap:6px;margin-bottom:14px;padding:12px;font-size:13px;display:grid}.kp-resumen>div{justify-content:space-between;align-items:center;gap:8px;display:flex}.kp-resumen span{color:#64748b}.kp-resumen strong{color:#0f172a;text-align:right;font-weight:600}.kp-resumen .kp-danger{color:#dc2626}.kp-resumen .kp-ok{color:#16a34a}.kp-actions{flex-wrap:wrap;gap:8px;display:flex}.kp-btn{color:#0f172a;cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:8px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:background .15s,border-color .15s}.kp-btn:hover{background:#f8fafc;border-color:#94a3b8}.kp-btn-primary{color:#fff;background:#2563eb;border-color:#2563eb;font-weight:600}.kp-btn-primary:hover{background:#1d4ed8;border-color:#1d4ed8}@media (width>=768px) and (width<=1023px){.kp-left{width:240px}}@media (width<=767px){.kp-overlay{padding:0}.kp-modal{width:100%;height:100dvh;max-height:none;box-shadow:none;border-radius:0}.kp-header{padding:calc(12px + env(safe-area-inset-top,0px)) 12px 12px 16px}.kp-title{font-size:16px}.kp-back{margin-left:-6px;display:inline-flex}.kp-body{flex-direction:column}.kp-left,.kp-right{border-right:none;flex:1;width:100%;min-height:0}.kp-body.is-lista .kp-right,.kp-body.is-detalle .kp-left{display:none}.kp-left{padding:12px 16px}.kp-right{padding:14px 16px 0}.kp-input{min-height:44px;font-size:16px}.kp-kit-btn{min-height:48px;padding:12px 10px;font-size:15px}.kp-kit-price{font-size:13px}.kp-btn{min-height:44px;font-size:15px}.kp-row,.kp-opt-row{font-size:15px}.kp-opt-row{padding:8px 0}.kp-opt-row input{width:18px;height:18px}.kp-kit-title{font-size:17px}.kp-resumen{font-size:14px}.kp-close{padding:10px}.kp-actions{z-index:2;padding:10px 16px calc(10px + env(safe-area-inset-bottom,0px));background:#fff;border-top:1px solid #e2e8f0;margin:16px -16px 0;position:sticky;bottom:0}.kp-actions .kp-btn{flex:auto}.kp-save-box{margin-top:16px}.kp-save-row{flex-direction:column}.kp-save-row .kp-btn{width:100%}}@media (width<=359px){.kp-actions{flex-direction:column}.kp-actions .kp-btn{width:100%}}.sidebar{z-index:30}.sidebar-logout{cursor:pointer;text-align:left;background:0 0;border:none;width:100%;font-family:inherit}.sidebar-email{color:#9ca3af;text-overflow:ellipsis;white-space:nowrap;margin:0 0 8px 12px;font-size:11px;overflow:hidden}.sidebar-date{cursor:default;color:#9ca3af;font-size:11px}.sidebar-date svg,.sidebar-logout svg,.nav-item svg{flex-shrink:0}@media (width>=768px) and (width<=900px){.sidebar{width:60px}.sidebar-brand{justify-content:center;padding:16px 0}.sidebar-brand-text,.nav-item span,.nav-section-label,.sidebar-email{display:none}.nav-item{justify-content:center;padding:10px}.sidebar-footer{padding:14px 6px}.main-content{margin-left:60px}}@media (width<=767px){.sidebar{display:none}.main-content{margin-left:0;padding:0}}
