*{box-sizing:border-box;margin:0;padding:0}
:root{
  --g:#8eb436;--gd:#5e7220;--gxd:#3a4e0e;--gl:#f0f5e6;--gm:#c5da8a;
  --sb:#0e1608;--bg:#f5f6f2;--sur:#fff;--bdr:#e3e5dd;--bdm:#cdd0c6;
  --tx:#1a1e12;--txm:#62685a;--txh:#96a08a;
  --am:#b87d1a;--amb:#fef5e4;
  --bl:#1a66a8;--blb:#e6f0fa;
  --rd:#b42020;--rdb:#fdeaea;
  --pu:#6b2fa0;--pub:#f2eafa;
  --fn:'Montserrat',sans-serif;--mo:'DM Mono',monospace;
  --r:10px;--rl:14px;--sh:0 1px 4px rgba(0,0,0,0.07);
  /* Variables adicionales para compatibilidad de módulos */
  --card:#ffffff;
  --bgh:#edf0e8;
  --sd:#7a9c2e;
  --tx1:#2a2e22;
  --txl:#b0b8a8;
  --r2:12px;
}
html,body{height:100%;font-family:var(--fn);background:var(--bg);color:var(--tx);font-size:14px}
.app{display:flex;height:100vh;overflow:hidden}

/* SIDEBAR */
.sb{width:220px;min-width:220px;background:var(--sb);display:flex;flex-direction:column;overflow-y:auto;flex-shrink:0;height:100vh;position:fixed;left:0;top:0;z-index:100}
.sb-logo{padding:8px 14px 8px;border-bottom:1px solid rgba(255,255,255,0.06)}
.sb-icon{font-size:20px;margin-bottom:4px}
.sb-brand{color:var(--g);font-size:13px;font-weight:800;letter-spacing:.2px}
.sb-sub{color:rgba(255,255,255,0.28);font-size:9px;letter-spacing:1.5px;text-transform:uppercase;margin-top:2px}
.sb-nav{padding:12px 8px;flex:1;display:flex;flex-direction:column;gap:1px}
.sb-sec{color:rgba(255,255,255,0.22);font-size:9px;letter-spacing:1.8px;text-transform:uppercase;padding:8px 10px 3px;font-weight:700}
.ni{display:flex;align-items:center;gap:7px;padding:5px 10px;border-radius:6px;cursor:pointer;color:rgba(255,255,255,0.6);font-size:12px;font-weight:500;border:none;background:none;width:100%;text-align:left;transition:all .15s}
.ni:hover{background:rgba(142,180,54,0.14);color:rgba(255,255,255,0.88)}
.ni.on{background:rgba(142,180,54,0.2);color:var(--g);font-weight:700}
.ni i{font-size:16px;width:18px;flex-shrink:0}
.sb-foot{padding:8px 12px;border-top:1px solid rgba(255,255,255,0.06)}
.ua{display:flex;align-items:center;gap:9px}
.uav{width:24px;height:24px;border-radius:50%;background:var(--gd);display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;color:#fff;flex-shrink:0}
.un{font-size:12px;color:rgba(255,255,255,0.55);font-weight:500}
.unr{font-size:10px;color:rgba(255,255,255,0.3)}

/* MAIN */
.main{flex:1;overflow:hidden;display:flex;flex-direction:column;min-width:0;margin-left:220px}
.topbar{background:var(--sur);border-bottom:1px solid var(--bdr);padding:0 24px;min-height:54px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.tb-l{display:flex;align-items:center;gap:12px}
.tb-title{font-size:15px;font-weight:700;color:var(--tx)}
.tb-badge{font-size:11px;background:var(--gl);color:var(--gd);padding:2px 9px;border-radius:20px;font-weight:700}
.tb-r{display:flex;gap:7px;align-items:center}
.scroll{flex:1;overflow-y:auto;padding:22px 24px}
.cl-tab-fullscreen{position:fixed!important;inset:56px 0 0 0!important;z-index:2999!important;display:block!important;overflow-y:auto!important;background:#f7f8f5!important;padding:28px 40px!important;max-height:calc(100vh - 56px)!important}
.page{display:none;flex-direction:column;flex:1;overflow:hidden;min-height:0}.page.on{display:flex}

/* BUTTONS */
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--r);font-size:13px;font-weight:600;cursor:pointer;border:1px solid var(--bdm);background:var(--sur);color:var(--tx);font-family:var(--fn);transition:all .15s;white-space:nowrap}
.btn:hover{background:var(--bg)}
.btn.pri{background:var(--g);border-color:var(--g);color:#fff}
.btn.pri:hover{background:var(--gd);border-color:var(--gd)}
.btn.sec{background:var(--gl);border-color:var(--gm);color:var(--gd)}
.btn.sec:hover{background:#e2efca}
.btn.ghost{border-color:transparent;background:transparent}
.btn.ghost:hover{background:var(--bg)}
.btn.danger{background:var(--rdb);border-color:#f0b8b8;color:var(--rd)}
.btn.sm{padding:5px 10px;font-size:12px}
.btn.xs{padding:3px 8px;font-size:11px}
.btn i{font-size:15px}

/* CARDS */
.card{background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);padding:20px 22px;margin-bottom:14px;box-shadow:var(--sh)}
.ct{font-size:11px;font-weight:800;color:var(--txm);margin-bottom:16px;display:flex;align-items:center;gap:7px;text-transform:uppercase;letter-spacing:.5px}
.ct i{color:var(--g);font-size:17px}
.ct .cs{font-size:12px;color:var(--txh);text-transform:none;font-weight:400;letter-spacing:0;margin-left:4px}

/* FORMS */
.fg{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fg3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}
.fg4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:12px}
.fgr{display:flex;flex-direction:column;gap:5px}
.fgr.full{grid-column:1/-1}
.fgr.sp2{grid-column:span 2}
label{font-size:10px;color:var(--txm);font-weight:700;letter-spacing:.4px;text-transform:uppercase}
input,select,textarea{padding:8px 11px;border-radius:var(--r);border:1px solid var(--bdm);background:var(--sur);color:var(--tx);font-size:13px;font-family:var(--fn);width:100%;transition:border-color .15s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--g);box-shadow:0 0 0 3px rgba(142,180,54,.12)}
input::placeholder,textarea::placeholder{color:var(--txh)}
textarea{resize:vertical;min-height:70px}
.pfx{display:flex;align-items:center;border:1px solid var(--bdm);border-radius:var(--r);overflow:hidden;background:var(--sur)}
.pfx span{padding:8px 9px;background:var(--bg);color:var(--txm);font-size:12px;font-weight:700;border-right:1px solid var(--bdm);flex-shrink:0}
.pfx input{border:none;border-radius:0;flex:1;box-shadow:none!important}
.fhint{font-size:10px;color:var(--txh);margin-top:2px}

/* ALCANCES DESINSTALACIÓN */
.alc-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;border:1px solid var(--bdm);background:var(--bg);transition:all .15s;cursor:pointer;user-select:none}
.alc-item.on{background:var(--gl);border-color:var(--gm)}
.alc-item.on .alc-check{background:var(--g);border-color:var(--g);color:#fff}
.alc-check{width:18px;height:18px;border-radius:4px;border:2px solid var(--bdm);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:12px;transition:all .15s}
.alc-label{flex:1;font-size:12px;font-weight:500;color:var(--tx);min-width:0}
.alc-label input{border:none;background:transparent;padding:0;font-size:12px;font-weight:500;color:var(--tx);width:100%;font-family:var(--fn)}
.alc-label input:focus{outline:none}
.alc-precio{display:flex;align-items:center;gap:4px;flex-shrink:0}
.alc-precio span{font-size:11px;color:var(--txm);font-weight:700}
.alc-precio input{width:80px;padding:4px 7px;font-size:12px;border:1px solid var(--bdm);border-radius:6px;background:var(--sur);color:var(--tx);font-family:var(--fn);text-align:right}
.alc-item.on .alc-precio input{border-color:var(--gm);background:#fff}
.alc-del{color:var(--txh);font-size:14px;cursor:pointer;padding:2px 4px;border-radius:4px;transition:all .15s;flex-shrink:0}
.alc-del:hover{color:var(--rd);background:var(--rdb)}

/* TAGS */
.tag{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:700}
.tg{background:var(--gl);color:var(--gd)}
.ta{background:var(--amb);color:var(--am)}
.tb2{background:var(--blb);color:var(--bl)}
.tr{background:var(--rdb);color:var(--rd)}
.tp{background:var(--pub);color:var(--pu)}
.tgr{background:#f0f0ec;color:var(--txm)}

/* STATS */
.sg{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:18px}
.sc{background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);padding:16px 18px;box-shadow:var(--sh)}
.sc.acc{border-left:3px solid var(--g);background:var(--gl)}
.sl{font-size:10px;color:var(--txm);margin-bottom:6px;text-transform:uppercase;letter-spacing:.8px;font-weight:700}
.sv{font-size:24px;font-weight:800;color:var(--tx);line-height:1}
.ss{font-size:11px;color:var(--txh);margin-top:4px}
.ss.up{color:var(--gd)}.ss.dn{color:var(--rd)}

/* TABLE */
.tw{overflow-x:auto;border-radius:var(--r)}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;padding:9px 12px;border-bottom:2px solid var(--bdr);color:var(--txm);font-weight:800;font-size:10px;text-transform:uppercase;letter-spacing:.8px;white-space:nowrap;background:var(--bg)}
td{padding:11px 12px;border-bottom:1px solid var(--bdr);color:var(--tx);vertical-align:middle}
tr:last-child td{border-bottom:none}
tbody tr:hover td{background:#fafaf7}
.tdm{font-weight:700}.tds{font-size:11px;color:var(--txh);margin-top:2px}

/* KANBAN */
.kanban{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px;align-items:stretch}
.kcol{min-width:0;flex:1;display:flex;flex-direction:column}
.kh{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;padding:10px 16px;border-radius:10px 10px 0 0;display:flex;align-items:center;justify-content:space-between}
.kb{background:var(--bg);border:1px solid var(--bdr);border-top:none;border-radius:0 0 10px 10px;padding:10px;display:flex;flex-direction:column;gap:10px;min-height:240px;flex:1}
.kcard{background:var(--sur);border:1px solid var(--bdr);border-radius:10px;padding:16px;cursor:grab;transition:all .15s;box-shadow:var(--sh)}
.kcard:hover{border-color:var(--g);box-shadow:0 4px 14px rgba(0,0,0,0.1);transform:translateY(-2px)}
.kcard:active{cursor:grabbing}
.kcard[draggable="true"]:hover{border-color:var(--g)}
.kcol.kdrop-over .kb{background:rgba(142,180,54,.08);border-radius:10px;outline:2px dashed var(--g);outline-offset:-4px}
.kcol.kdrop-over{transform:scale(1.01)}
.kc-name{font-weight:700;font-size:15px;color:var(--tx);line-height:1.3}
.kc-amt{font-size:15px;color:var(--gd);font-weight:800;margin-top:5px}
.kc-meta{font-size:12px;color:var(--txh);margin-top:8px;display:flex;flex-direction:column;gap:4px}

/* MODAL */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:500;display:flex;align-items:flex-start;justify-content:center;padding:24px;overflow-y:auto}
.modal-bg.hide{display:none}
.gar-fs{position:fixed;inset:0;background:var(--bg);z-index:3500;overflow:hidden;flex-direction:column;display:none}
.gar-fs.open{display:flex}
.fs-tab{background:none;border:none;padding:6px 12px;cursor:pointer;font-size:12px;font-weight:600;color:var(--txm);border-bottom:2px solid transparent;white-space:nowrap;font-family:var(--fn)}
.fs-tab.on{color:var(--g);border-bottom-color:var(--g)}
.modal{background:var(--sur);border-radius:var(--rl);width:100%;max-width:900px;box-shadow:0 8px 40px rgba(0,0,0,.18);position:relative;margin:auto}
.modal.sm{max-width:520px}
.modal.lg{max-width:1300px}
.mh{display:flex;align-items:center;justify-content:space-between;padding:22px 28px;border-bottom:1px solid var(--bdr)}
.mh-title{font-size:15px;font-weight:800;color:var(--tx)}
.mb{padding:22px}
.mf{padding:16px 22px;border-top:1px solid var(--bdr);display:flex;gap:8px;justify-content:flex-end;background:var(--bg);border-radius:0 0 var(--rl) var(--rl)}

/* TABS */
.tabs{display:flex;gap:0;border-bottom:2px solid var(--bdr);margin-bottom:20px}
.tab{padding:10px 18px;cursor:pointer;font-size:13px;font-weight:600;color:var(--txm);border-bottom:2.5px solid transparent;margin-bottom:-2px;transition:all .15s}
.tab:hover{color:var(--tx)}
.tab.on{color:var(--gd);border-bottom-color:var(--g)}

/* ALERTS */
.alert{padding:11px 14px;border-radius:var(--r);font-size:13px;display:flex;align-items:flex-start;gap:9px;margin-bottom:12px}
.alert i{font-size:17px;flex-shrink:0;margin-top:1px}
.ai{background:var(--blb);color:var(--bl);border:1px solid #aaccec}
.as{background:var(--gl);color:var(--gd);border:1px solid var(--gm)}
.aw{background:var(--amb);color:var(--am);border:1px solid #ddc070}

/* SECTION DIVIDERS */
.sdiv{font-size:10px;font-weight:800;color:var(--txm);text-transform:uppercase;letter-spacing:.8px;padding:14px 0 8px;border-bottom:1px solid var(--bdr);margin-bottom:12px;display:flex;align-items:center;gap:7px}

/* SUMMARY BOX */
.sumbox{background:var(--gl);border:1px solid var(--gm);border-radius:var(--r);padding:14px 16px}
.srow{display:flex;justify-content:space-between;align-items:center;padding:3px 0;font-size:13px}
.srow .sl2{color:var(--gxd);font-weight:500}
.srow .sv2{color:var(--gd);font-weight:700}
.stot{border-top:1.5px solid var(--gm);margin-top:7px;padding-top:9px;font-size:15px;font-weight:800;color:var(--gxd)}
.letter{background:var(--bg);border:1px solid var(--bdr);border-radius:var(--r);padding:10px 14px;font-size:12px;color:var(--txm);line-height:1.9;font-family:var(--mo);white-space:pre-wrap}

/* AMORT */
.amort-wrap{max-height:350px;overflow-y:auto;border:1px solid var(--bdr);border-radius:var(--r)}
.amort-wrap table th{;z-index:1}
.hlrow td{background:#eef5d8!important;font-weight:700}

/* GARANTÍAS */
.gbox{display:flex;flex-wrap:wrap;gap:8px}
.gitem{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid var(--bdr);border-radius:var(--r);cursor:pointer;font-size:13px;font-weight:500;background:var(--sur);transition:all .15s;position:relative}
.gitem.on{background:var(--gl);border-color:var(--gm);color:var(--gd)}
.gitem input[type=checkbox]{accent-color:var(--g);width:14px;height:14px}
.gadd{display:flex;align-items:center;gap:6px;padding:8px 12px;border:1.5px dashed var(--bdm);border-radius:var(--r);cursor:pointer;font-size:13px;color:var(--txh);background:none;font-family:var(--fn);transition:all .15s}
.gadd:hover{border-color:var(--g);color:var(--g)}

/* HITOS */
.hito-r{display:grid;grid-template-columns:auto 1fr 90px 130px 36px;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--bdr);border-radius:var(--r);background:var(--sur);margin-bottom:6px}
.hito-r:hover{border-color:var(--gm)}
.hidx{width:22px;height:22px;border-radius:50%;background:var(--gl);color:var(--gd);font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.addhito{display:flex;align-items:center;justify-content:center;gap:7px;padding:9px;border:1.5px dashed var(--bdm);border-radius:var(--r);cursor:pointer;color:var(--txh);font-size:13px;font-weight:600;background:none;width:100%;font-family:var(--fn);transition:all .15s}
.addhito:hover{border-color:var(--g);color:var(--g)}

/* CONTRACT PREVIEW */
.cprev{background:#141a0a;border-radius:var(--r);padding:20px;font-size:12px;color:#bccf94;line-height:2;max-height:500px;overflow-y:auto;font-family:var(--mo);white-space:pre-wrap}

/* PAGARÉ */
.pdoc{border:2px solid var(--bdr);border-radius:var(--rl);padding:28px;background:#fff;position:relative;overflow:hidden}
.pdoc::before{content:'PAGARÉ';position:absolute;font-size:70px;font-weight:900;color:rgba(142,180,54,.05);top:50%;left:50%;transform:translate(-50%,-50%) rotate(-18deg);pointer-events:none;letter-spacing:8px;z-index:0}
.pdoc-in{position:relative;z-index:1}
.ptitle{font-size:18px;font-weight:900;text-align:center;text-transform:uppercase;letter-spacing:4px;margin-bottom:3px}
.psub{text-align:center;font-size:10px;color:var(--txh);letter-spacing:1px;text-transform:uppercase;margin-bottom:18px}
.pamt{font-size:26px;font-weight:900;color:var(--gd);text-align:center;padding:16px;border:2px solid var(--g);border-radius:var(--r);margin:16px 0;background:var(--gl);font-family:var(--mo)}
.psign{display:grid;grid-template-columns:1fr 1fr;gap:40px;margin-top:44px}
.psign-b{text-align:center}
.psign-line{border-top:1px solid var(--tx);padding-top:7px;font-size:11px;color:var(--txm)}
.psign-name{font-size:12px;font-weight:800;color:var(--tx);margin-top:3px}

/* PILL / POTENCIA */
.ppill{display:inline-flex;align-items:center;gap:7px;background:var(--gl);border:1px solid var(--gm);border-radius:30px;padding:7px 14px;font-size:13px;font-weight:700;color:var(--gd)}

/* 2-col / 3-col helpers */
.c2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.c3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}

/* Step bar */
.steps{display:flex;background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);overflow:hidden;margin-bottom:22px;box-shadow:var(--sh)}
.step{flex:1;display:flex;align-items:center;gap:9px;padding:12px 14px;cursor:pointer;position:relative;transition:background .15s}
.step:not(:last-child)::after{content:'';position:absolute;right:0;top:20%;height:60%;width:1px;background:var(--bdr)}
.step:hover{background:var(--bg)}
.step.on{background:var(--gl)}
.snum{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;flex-shrink:0}
.snum.done{background:var(--g);color:#fff}
.snum.on{background:var(--g);color:#fff;box-shadow:0 0 0 3px rgba(142,180,54,.25)}
.snum.pend{background:var(--bg);color:var(--txh);border:1.5px solid var(--bdm)}
.stxt{font-size:11px;font-weight:700;color:var(--txm)}
.step.on .stxt{color:var(--gd)}

/* Scrollbar */
::-webkit-scrollbar{width:5px;height:5px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--bdm);border-radius:99px}

/* CLIENT DETAIL VIEW */
.cdv-grid{display:grid;grid-template-columns:320px 1fr;gap:16px}
.info-row{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--bdr);font-size:13px}
.info-row:last-child{border:none}
.info-lbl{color:var(--txm);font-weight:600}
.info-val{color:var(--tx);font-weight:500;text-align:right;max-width:55%}

/* Action bar */
.abar{display:flex;gap:8px;flex-wrap:wrap;padding:16px 20px;background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);margin-top:14px;box-shadow:var(--sh)}

/* Ficha tecnica upload area */
.upload-area{border:1.5px dashed var(--bdm);border-radius:var(--r);padding:16px;text-align:center;cursor:pointer;color:var(--txh);font-size:13px;transition:all .15s;background:var(--bg)}
.upload-area:hover{border-color:var(--g);color:var(--g);background:var(--gl)}
.ft-list{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.ft-item{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--gl);border:1px solid var(--gm);border-radius:var(--r);font-size:12px;color:var(--gd)}

/* Vendor management */
.vend-card{background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);padding:16px 18px;display:flex;align-items:center;gap:14px;box-shadow:var(--sh);transition:all .15s}
.vend-card:hover{border-color:var(--gm)}
.vend-av{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;color:#fff;flex-shrink:0}
.vend-info{flex:1}
.vend-name{font-weight:700;font-size:14px;color:var(--tx)}
.vend-role{font-size:11px;color:var(--txh);margin-top:1px}
.vend-stats{font-size:12px;color:var(--gd);font-weight:600;margin-top:4px}

/* Corrida cotización */
.cot-preview{background:var(--sb);border-radius:var(--rl);padding:24px;color:#fff}
.cot-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:22px}
.cot-brand{font-size:18px;font-weight:900;color:var(--g)}
.cot-sub{font-size:11px;color:rgba(255,255,255,.4);margin-top:2px;letter-spacing:.5px}
.cot-section{margin-bottom:18px}
.cot-stitle{font-size:10px;font-weight:800;color:rgba(255,255,255,.4);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px}
.cot-row{display:flex;justify-content:space-between;padding:5px 0;font-size:13px;border-bottom:1px solid rgba(255,255,255,.06)}
.cot-row:last-child{border:none}
.cot-lbl{color:rgba(255,255,255,.6)}
.cot-val{color:#fff;font-weight:600}
.cot-total{background:rgba(142,180,54,.15);border:1px solid rgba(142,180,54,.3);border-radius:8px;padding:12px 16px;display:flex;justify-content:space-between;align-items:center;margin-top:12px}
.cot-total-lbl{font-size:12px;color:rgba(255,255,255,.6);font-weight:600;text-transform:uppercase}
.cot-total-val{font-size:20px;font-weight:900;color:var(--g)}

/* LOGO & DOCUMENT HEADERS */
.es-logo{width:44px;height:44px;border-radius:8px;object-fit:cover;flex-shrink:0}
.es-logo-sm{width:32px;height:32px;border-radius:6px;object-fit:cover;flex-shrink:0}
.doc-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:22px;padding-bottom:18px;border-bottom:2px solid var(--g)}
.doc-brand{display:flex;align-items:center;gap:12px}
.doc-brand-name{font-size:17px;font-weight:900;color:var(--gxd);line-height:1.1}
.doc-brand-sub{font-size:10px;color:var(--txh);letter-spacing:.8px;text-transform:uppercase;margin-top:2px}
.doc-brand-data{font-size:10px;color:var(--txm);line-height:1.8;margin-top:3px}
.doc-right{text-align:right}
.doc-right-title{font-size:18px;font-weight:900;text-transform:uppercase;letter-spacing:3px;color:var(--tx)}
.doc-right-folio{font-size:11px;color:var(--txh);font-family:var(--mo);margin-top:3px}
.doc-right-date{font-size:11px;color:var(--txm);margin-top:2px}
.doc-footer{border-top:1px solid var(--bdr);padding-top:12px;margin-top:20px;display:flex;justify-content:space-between;align-items:center}
.doc-footer-brand{font-size:10px;color:var(--txh);line-height:1.7}
.doc-watermark-wrap{position:relative;overflow:visible}

/* COT PROFESSIONAL */
.cot-preview{background:var(--sb);border-radius:var(--rl);padding:28px;color:#fff}
.cot-logo-wrap{display:flex;align-items:center;gap:10px}
.cot-logo-img{width:38px;height:38px;border-radius:7px;object-fit:cover;flex-shrink:0}

/* PAGARE PROFESSIONAL */
.pdoc{border:2px solid var(--bdm);border-radius:var(--rl);padding:0;background:#fff;position:relative;overflow:hidden}
.pdoc-topbar{background:var(--gxd);padding:14px 24px;display:flex;align-items:center;justify-content:space-between}
.pdoc-topbar-brand{display:flex;align-items:center;gap:10px}
.pdoc-topbar-name{font-size:14px;font-weight:900;color:#fff;letter-spacing:.3px}
.pdoc-topbar-sub{font-size:9px;color:rgba(255,255,255,.5);text-transform:uppercase;letter-spacing:1px;margin-top:1px}
.pdoc-topbar-title{font-size:22px;font-weight:900;color:var(--g);letter-spacing:4px;text-transform:uppercase}
.pdoc-body{padding:24px;position:relative}
.pdoc::before{content:'PAGARÉ';position:absolute;font-size:80px;font-weight:900;color:rgba(142,180,54,.04);top:55%;left:50%;transform:translate(-50%,-50%) rotate(-15deg);pointer-events:none;letter-spacing:10px;z-index:0}
.pdoc-in{position:relative;z-index:1}
.ptitle{display:none}
.psub{display:none}


/* BI DASHBOARD */
.bi-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px}
.bi-card{background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);padding:15px 16px;box-shadow:var(--sh)}
.bi-card.acc{border-left:3px solid var(--g);background:var(--gl)}
.bi-card.red{border-left:3px solid var(--rd);background:var(--rdb)}
.bi-card.blue{border-left:3px solid var(--bl);background:var(--blb)}
.bi-card.amber{border-left:3px solid var(--am);background:var(--amb)}
.bi-card.pur{border-left:3px solid var(--pu);background:var(--pub)}
.bi-lbl{font-size:9px;color:var(--txm);text-transform:uppercase;letter-spacing:.8px;font-weight:800;margin-bottom:6px}
.bi-val{font-size:22px;font-weight:900;color:var(--tx);line-height:1}
.bi-sub{font-size:10px;color:var(--txh);margin-top:4px}
.bi-sub.up{color:var(--gd)}.bi-sub.dn{color:var(--rd)}
.bi-tabs{display:flex;gap:0;border-bottom:2px solid var(--bdr);margin-bottom:16px}
.bi-tab{padding:8px 16px;cursor:pointer;font-size:12px;font-weight:700;color:var(--txm);border-bottom:2.5px solid transparent;margin-bottom:-2px;transition:all .15s}
.bi-tab:hover{color:var(--tx)}
.bi-tab.on{color:var(--gd);border-bottom-color:var(--g)}
/* BAR CHART */
.bar-chart{display:flex;align-items:flex-end;gap:6px;height:120px;padding:8px 0 0}
.bar-wrap{display:flex;flex-direction:column;align-items:center;flex:1;height:100%}
.bar-body{width:100%;background:var(--g);border-radius:4px 4px 0 0;transition:height .4s;min-height:2px;cursor:pointer;position:relative}
.bar-body:hover{background:var(--gd)}
.bar-tip{position:absolute;top:-22px;left:50%;transform:translateX(-50%);font-size:9px;font-weight:800;color:var(--gd);white-space:nowrap;background:var(--gl);padding:1px 5px;border-radius:4px}
.bar-lbl{font-size:9px;color:var(--txh);margin-top:5px;font-weight:600;text-align:center}
/* DONUT */
.donut-wrap{display:flex;align-items:center;gap:16px}
.donut-legend{display:flex;flex-direction:column;gap:6px;flex:1}
.donut-item{display:flex;align-items:center;gap:7px;font-size:12px}
.donut-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
/* HITRATE */
.hr-bar{height:8px;border-radius:4px;background:var(--bdr);overflow:hidden;margin-top:4px}
.hr-fill{height:100%;border-radius:4px;background:var(--g);transition:width .5s}
/* PROGRESS RING */
.ring-wrap{display:flex;align-items:center;gap:12px}
/* DELETE confirm */
.delete-confirm{background:var(--rdb);border:1px solid #f0b0b0;border-radius:var(--r);padding:12px 16px;margin-top:10px;font-size:13px;color:var(--rd);display:none}
/* Period selector */
.period-sel{display:flex;gap:4px;background:var(--bg);border-radius:var(--r);padding:3px;border:1px solid var(--bdr)}
.period-opt{padding:5px 12px;border-radius:7px;cursor:pointer;font-size:11px;font-weight:700;color:var(--txm);border:none;background:none;font-family:var(--fn);transition:all .15s}
.period-opt.on{background:var(--sur);color:var(--gd);box-shadow:0 1px 3px rgba(0,0,0,.1)}


/* ===================================
   PRINT / PDF STYLES
=================================== */
@media print {
  body { -webkit-print-color-adjust: exact; print-color-adjust: exact; background:#fff!important; }
  .print-only { display: block!important; }
  .no-print { display: none!important; }
  .print-page { page-break-after: always; padding: 0; margin: 0; }
  .print-page:last-child { page-break-after: avoid; }
  @page { margin: 14mm 16mm; size: A4 portrait; }
}
.print-only { display: none; }

/* DOCUMENT BASE STYLES (screen + print) */
.doc-wrap {
  background: #fff;
  font-family: 'Montserrat', sans-serif;
  font-size: 13px;
  color: #1a1e12;
  line-height: 1.6;
  max-width: 780px;
  margin: 0 auto;
}
.doc-hdr {
  display: flex; align-items: flex-start; justify-content: space-between;
  padding-bottom: 16px; margin-bottom: 20px;
  border-bottom: 3px solid #8eb436;
}
.doc-hdr-brand { display: flex; align-items: center; gap: 12px; }
.doc-hdr-logo { width: 52px; height: 52px; border-radius: 10px; object-fit: cover; }
.doc-hdr-co { }
.doc-hdr-name { font-size: 16px; font-weight: 900; color: #3a4e0e; letter-spacing: .2px; }
.doc-hdr-rfc  { font-size: 10px; color: #62685a; font-family: 'DM Mono', monospace; margin-top: 1px; }
.doc-hdr-addr { font-size: 10px; color: #62685a; line-height: 1.7; margin-top: 2px; }
.doc-hdr-right { text-align: right; }
.doc-hdr-type { font-size: 22px; font-weight: 900; text-transform: uppercase; letter-spacing: 3px; color: #1a1e12; }
.doc-hdr-folio { font-size: 11px; color: #62685a; font-family: 'DM Mono', monospace; margin-top: 4px; }
.doc-hdr-date  { font-size: 11px; color: #62685a; margin-top: 2px; }
.doc-section { margin-bottom: 20px; }
.doc-section-title {
  font-size: 10px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px;
  color: #5e7220; border-bottom: 1.5px solid #c5da8a; padding-bottom: 5px; margin-bottom: 10px;
}
.doc-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.doc-3col { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }
.doc-row { display: flex; justify-content: space-between; padding: 5px 0; border-bottom: 1px solid #f0f0ec; font-size: 12px; }
.doc-row:last-child { border: none; }
.doc-row-lbl { color: #62685a; font-weight: 500; }
.doc-row-val { color: #1a1e12; font-weight: 700; text-align: right; max-width: 55%; }
.doc-table { width: 100%; border-collapse: collapse; font-size: 12px; margin-top: 8px; }
.doc-table th { background: #f0f5e6; color: #3a4e0e; font-weight: 800; padding: 7px 10px; border: 1px solid #c5da8a; font-size: 10px; text-transform: uppercase; letter-spacing: .5px; text-align: left; }
.doc-table td { padding: 7px 10px; border: 1px solid #e3e5dd; vertical-align: top; }
.doc-table tr:nth-child(even) td { background: #fafaf7; }
.doc-table tfoot tr td { border-left: 1px solid #c5da8a; border-right: 1px solid #c5da8a; border-bottom: 1px solid #c5da8a; }
.doc-amount-box {
  background: #f0f5e6; border: 2px solid #8eb436; border-radius: 10px;
  padding: 14px 20px; margin: 16px 0; display: flex; justify-content: space-between; align-items: center;
}
.doc-amount-lbl { font-size: 11px; color: #5e7220; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; }
.doc-amount-val { font-size: 22px; font-weight: 900; color: #3a4e0e; }
.doc-amount-letra { font-size: 11px; color: #62685a; font-style: italic; margin-top: 2px; font-family: 'DM Mono', monospace; }
.doc-sign-section { margin-top: 40px; }
.doc-sign-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 50px; margin-top: 60px; }
.doc-sign-block { text-align: center; }
.doc-sign-line { border-top: 1.5px solid #1a1e12; padding-top: 8px; font-size: 11px; color: #62685a; }
.doc-sign-name { font-size: 13px; font-weight: 800; color: #1a1e12; margin-top: 4px; }
.doc-sign-role { font-size: 10px; color: #96a08a; margin-top: 2px; }
.doc-digital-sign {
  border: 1.5px dashed #c5da8a; border-radius: 8px; padding: 12px 16px; margin-top: 10px;
  background: #f0f5e6; text-align: center; font-size: 10px; color: #96a08a;
}
.doc-footer {
  margin-top: 24px; padding-top: 12px; border-top: 1px solid #e3e5dd;
  display: flex; justify-content: space-between; align-items: center;
  font-size: 9px; color: #96a08a;
}
.doc-footer img { width: 22px; height: 22px; border-radius: 4px; object-fit: cover; opacity: .5; }
.doc-watermark { position: relative; }
.doc-pill {
  display: inline-flex; align-items: center; gap: 6px; background: #f0f5e6;
  border: 1px solid #c5da8a; border-radius: 20px; padding: 4px 12px;
  font-size: 11px; font-weight: 700; color: #3a4e0e;
}
/* HITOS TABLE inside pagaré */
.pag-hito-row { display: flex; justify-content: space-between; align-items: center; padding: 5px 10px; border-radius: 5px; font-size: 11px; margin-bottom: 3px; }
.pag-hito-row.pagado { background: #e8f5e2; text-decoration: line-through; color: #62685a; }
.pag-hito-row.pendiente { background: #fff8ec; font-weight: 600; }
.pag-hito-status { font-size: 10px; font-weight: 800; padding: 2px 8px; border-radius: 20px; flex-shrink: 0; margin-left: 8px; }
.pag-hito-status.pagado { background: #c8eabc; color: #1a5c00; }
.pag-hito-status.pendiente { background: #ffe0a0; color: #7a4200; }


/* COBRANZA */
.hito-status-badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:700;cursor:pointer;transition:all .15s;border:none;font-family:var(--fn)}
.hs-pagado{background:#e0f0d8;color:#1a5c00}
.hs-pagado:hover{background:#c8e8bc}
.hs-pendiente{background:#fff3e0;color:#7a4200}
.hs-pendiente:hover{background:#ffe0b0}
.hs-vencido{background:var(--rdb);color:var(--rd)}
.hs-vencido:hover{background:#f8c8c8}
.hs-sinFecha{background:#f0f0ec;color:var(--txm)}
.cob-row-vencido td{background:#fff8f8!important}
.cob-row-vencido:hover td{background:#fdeaea!important}


/* TÉCNICO PICKER */
.tec-picker-wrap{position:relative}
.tec-picker-dropdown{position:absolute;background:var(--sur);border:1.5px solid var(--gm);border-radius:10px;box-shadow:0 6px 24px rgba(0,0,0,.18);z-index:99999;max-height:240px;overflow-y:auto;min-width:260px}
.tec-picker-item{display:flex;align-items:center;gap:10px;padding:9px 12px;cursor:pointer;border-bottom:1px solid var(--bdr);transition:background .1s}
.tec-picker-item:last-child{border:none}
.tec-picker-item:hover{background:var(--gl)}
.tec-picker-item-avatar{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;color:#fff;flex-shrink:0}
.tec-picker-item-name{font-size:13px;font-weight:600;color:var(--tx)}
.tec-picker-item-sub{font-size:11px;color:var(--txm)}
.tec-picker-empty{padding:14px 12px;text-align:center;font-size:12px;color:var(--txh)}

/* Admin-only elements — shown/hidden via JS after login */
.admin-only { display: none !important; }
.admin-visible .admin-only { display: inline-flex !important; }

/* Role labels en sidebar — solo muestra el del rol activo */
.role-badge { display:none; font-size:10px; font-weight:700; padding:2px 8px; border-radius:20px; margin-top:2px; }
.role-vendedor      .role-badge[data-rol="vendedor"]      { display:inline-block; background:#e8f5e9; color:#2e7d32; }
.role-ingenieria    .role-badge[data-rol="ingenieria"]    { display:inline-block; background:#e3f2fd; color:#1565c0; }
.role-administracion .role-badge[data-rol="administracion"]{ display:inline-block; background:#fff3e0; color:#e65100; }
.role-lider         .role-badge[data-rol="lider"]         { display:inline-block; background:#f3e5f5; color:#6a1b9a; }
.role-gerencia      .role-badge[data-rol="gerencia"]      { display:inline-block; background:#fce4ec; color:#880e4f; }

/* BÚSQUEDA GLOBAL */
.srch-wrap{position:relative}
.srch-inp{width:260px;padding:7px 12px 7px 34px;border:1px solid var(--bdm);border-radius:var(--r);font-size:12px;font-family:var(--fn);background:var(--bg);color:var(--tx);transition:all .2s}
.srch-inp:focus{outline:none;border-color:var(--g);width:320px;box-shadow:0 0 0 3px rgba(142,180,54,.12)}
.srch-icon{position:absolute;left:10px;top:50%;transform:translateY(-50%);font-size:14px;color:var(--txm);pointer-events:none}
.srch-results{position:absolute;top:calc(100% + 6px);left:0;width:420px;background:var(--sur);border:1px solid var(--bdr);border-radius:var(--rl);box-shadow:0 8px 32px rgba(0,0,0,.15);z-index:9999;max-height:400px;overflow-y:auto;display:none}
.srch-results.open{display:block}
.srch-result-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--bdr);transition:background .12s}
.srch-result-item:last-child{border:none}
.srch-result-item:hover{background:var(--gl)}
.srch-result-icon{width:32px;height:32px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0}
.srch-result-name{font-size:13px;font-weight:700;color:var(--tx)}
.srch-result-sub{font-size:11px;color:var(--txm);margin-top:1px}
.srch-result-tag{font-size:10px;font-weight:700;padding:2px 7px;border-radius:20px;flex-shrink:0;margin-left:auto}
.srch-empty{padding:20px;text-align:center;color:var(--txh);font-size:13px}
.srch-section{padding:6px 14px 4px;font-size:9px;font-weight:800;color:var(--txm);text-transform:uppercase;letter-spacing:.8px;background:var(--bg)}

/* HISTORIAL DE ACTIVIDAD */
.timeline{display:flex;flex-direction:column;gap:0}
.tl-item{display:flex;gap:12px;padding:10px 0;border-bottom:1px solid var(--bdr);position:relative}
.tl-item:last-child{border:none}
.tl-dot{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;flex-shrink:0;margin-top:2px}
.tl-body{flex:1;min-width:0}
.tl-action{font-size:12px;font-weight:700;color:var(--tx)}
.tl-detail{font-size:11px;color:var(--txm);margin-top:2px;line-height:1.5}
.tl-time{font-size:10px;color:var(--txh);margin-top:3px;white-space:nowrap}
.tl-add-form{display:flex;gap:8px;padding:10px 0;border-top:1px solid var(--bdr);margin-top:4px}
.tl-add-input{flex:1;padding:7px 10px;border:1px solid var(--bdm);border-radius:var(--r);font-size:12px;font-family:var(--fn);background:var(--bg);color:var(--tx)}
.tl-add-input:focus{outline:none;border-color:var(--g)}


/* DIRECTORIO DE CLIENTES */
.client-dir-wrap{position:relative}
.client-dir-results{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--sur);border:1.5px solid var(--gm);border-radius:var(--rl);box-shadow:0 8px 24px rgba(0,0,0,.12);z-index:999;max-height:280px;overflow-y:auto;display:none}
.client-dir-results.open{display:block}
.client-dir-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;border-bottom:1px solid var(--bdr);transition:background .1s}
.client-dir-item:last-child{border:none}
.client-dir-item:hover{background:var(--gl)}
.client-dir-icon{width:32px;height:32px;border-radius:var(--r);background:var(--gm);color:var(--gd);font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.client-dir-name{font-size:13px;font-weight:700;color:var(--tx)}
.client-dir-sub{font-size:11px;color:var(--txm);margin-top:1px}
.client-dir-new{padding:10px 14px;font-size:12px;color:var(--txm);border-top:1px solid var(--bdr);display:flex;align-items:center;gap:6px}

@keyframes spin{to{transform:rotate(360deg)}}

/* -- Address autocomplete ------------------------------------- */
.addr-wrap { position:relative; }
.addr-dropdown {
  position:absolute; top:calc(100% + 4px); left:0; right:0;
  background:#fff; border-radius:12px; border:1.5px solid #e4ead8;
  box-shadow:0 8px 32px rgba(0,0,0,.12); z-index:9000;
  max-height:220px; overflow-y:auto;
  animation:wiz-slide-up .15s ease both;
}
.addr-opt {
  padding:10px 14px; cursor:pointer; display:flex; align-items:flex-start;
  gap:10px; border-bottom:0.5px solid #f4f6f0; transition:background .1s;
  font-family:var(--fn);
}
.addr-opt:last-child { border-bottom:none; }
.addr-opt:hover { background:#f0f5e6; }
.addr-opt-main { font-size:13px; font-weight:600; color:#1a2610; line-height:1.3; }
.addr-opt-sub  { font-size:11px; color:#96a08a; margin-top:2px; }
.addr-loading  { padding:12px 14px; font-size:12px; color:#96a08a; text-align:center; }
.addr-nomatch  { padding:12px 14px; font-size:12px; color:#96a08a; text-align:center; }
/* ── SOLPANEV ADMIN MODE: sidebar limpio ── */
body.solpanev-admin .sb-nav,
body.solpanev-admin .srch-wrap,
body.solpanev-admin #sb-api-btn,
body.solpanev-admin #sb-cfg-badge { display:none !important; }
/* ── Modo Demo y herramientas de desarrollo: SOLO visibles en la cuenta de la
   plataforma Solpanev, nunca en el portal de un cliente real — se activan por JS
   (body.solpanev-demo-ok) al iniciar sesión. "Limpiar datos locales" es una utilidad
   de desarrollo (borra el caché local del navegador) que no debe verse en producción,
   ni siquiera por accidente en una demo. ── */
#demo-toggle-btn, #ls-clear-btn { display:none !important; }
body.solpanev-demo-ok #demo-toggle-btn, body.solpanev-demo-ok #ls-clear-btn { display:flex !important; }
body.solpanev-admin #sb-admin-nav { display:flex !important; }
body.solpanev-admin .main > .page:not(#page-admin-panel):not(#page-dashboard):not(#page-config-empresa) { display:none !important; }
body.solpanev-admin.ap-fullscreen nav.sb{display:none !important}
body.solpanev-admin.ap-fullscreen .main{margin-left:0}

/* ── ADMIN PANEL CEO — módulos ── */
.ap-shell{display:flex;gap:18px;flex:1;min-height:0;align-items:stretch}
.ap-rail{width:198px;flex-shrink:0;background:linear-gradient(180deg,#0f1a05,#16260a);border-radius:16px;padding:14px 10px 18px;display:flex;flex-direction:column;gap:2px;overflow-y:auto}
.ap-rail::-webkit-scrollbar{width:4px}
.ap-rail-sec{font-size:9px;font-weight:800;color:#5a8a14;text-transform:uppercase;letter-spacing:1.2px;padding:12px 10px 5px}
.ap-tab{display:flex;align-items:center;gap:9px;padding:9px 10px;border:none;border-radius:10px;background:none;cursor:pointer;font-weight:600;font-size:12.5px;color:#96a08a;font-family:var(--fn);white-space:nowrap;transition:all .15s;text-align:left;width:100%}
.ap-tab i{font-size:16px;flex-shrink:0}
.ap-tab:hover{color:#e8f5d4;background:rgba(124,181,30,.1)}
.ap-tab.on{background:rgba(240,180,41,.15);color:#f0b429;font-weight:800}
.ap-rail-badge{margin-left:auto;background:#dc2626;color:#fff;border-radius:99px;font-size:9px;font-weight:800;padding:1px 6px;min-width:16px;text-align:center}
.ap-content{flex:1;min-width:0;overflow-y:auto;padding:2px 6px 28px 2px}
.ap-cal-day{background:#fff;border:1px solid var(--bdr);border-radius:10px;min-height:88px;padding:6px;cursor:pointer;transition:all .12s;display:flex;flex-direction:column;gap:3px;overflow:hidden}
.ap-cal-day:hover{border-color:#f0b429;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.ap-cal-day.off{background:var(--bg);opacity:.55}
.ap-cal-day.today{border:2px solid #f0b429;background:#fffbeb}
.ap-cal-day.sel{border:2px solid var(--g);background:#f7fbef}
.ap-cal-evt{font-size:9.5px;font-weight:700;padding:2px 6px;border-radius:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ap-rec-item{display:flex;align-items:flex-start;gap:12px;background:#fff;border:1px solid var(--bdr);border-radius:12px;padding:14px 16px;transition:box-shadow .12s}
.ap-rec-item:hover{box-shadow:0 2px 10px rgba(0,0,0,.05)}
.ap-pip-col{background:var(--bg);border-radius:12px;padding:12px;min-height:80px}
.ap-pip-card{background:#fff;border:1.5px solid var(--bdr);border-radius:10px;padding:12px;margin-bottom:8px;cursor:pointer;transition:all .15s;font-size:12px}
.ap-pip-card:hover{border-color:var(--gm);box-shadow:0 2px 8px rgba(0,0,0,.06)}
