*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{font-family:'IBM Plex Sans',system-ui,sans-serif;background:#f6f4ef;color:#2a2722}
.mono{font-family:'IBM Plex Mono',monospace}
input,select,textarea,button{font-family:inherit}
input:focus,select:focus,textarea:focus{outline:2px solid rgba(61,122,78,.3);outline-offset:0}
.boot{display:flex;height:100vh;align-items:center;justify-content:center;color:#8a8478}
a{color:#3d7a4e}

/* ---------- LOGIN ---------- */
.login-wrap{display:flex;min-height:100vh;align-items:center;justify-content:center;padding:20px;
  background:radial-gradient(1200px 600px at 70% -10%,#e9ede8,transparent),#f6f4ef}
.login-card{background:#fff;border:1px solid #e5e1d8;border-radius:16px;padding:34px 32px;width:100%;max-width:390px;
  box-shadow:0 20px 50px rgba(35,42,36,.12)}
.brand{display:flex;align-items:center;gap:11px;margin-bottom:24px}
.brand .mk{width:40px;height:40px;border-radius:10px;background:#3d7a4e;display:flex;align-items:center;justify-content:center}
.brand .mk i{width:16px;height:16px;border-radius:50%;border:3px solid #fff;display:block}
.brand b{font-size:15px}
.brand span{display:block;font-size:11px;color:#8a8478}
.login-card h1{font-size:19px;margin:0 0 4px}
.login-card p.sub{font-size:13px;color:#8a8478;margin:0 0 20px}
.field{margin-bottom:14px}
label.lbl{display:block;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:#8a8478;margin-bottom:5px}
.inp{width:100%;padding:11px 12px;border:1px solid #d8d4cc;border-radius:9px;font-size:15px;background:#fff;color:#2a2722}
.btn{background:#3d7a4e;color:#fff;border:none;padding:12px 18px;border-radius:9px;font-size:15px;font-weight:600;cursor:pointer;width:100%}
.btn:hover{filter:brightness(1.08)}
.btn.sm{width:auto;padding:9px 16px;font-size:14px}
.btn.ghost{background:#fff;border:1px solid #d8d4cc;color:#2a2722}
.err{background:#faeef0;color:#a03050;border-radius:8px;padding:9px 12px;font-size:13px;margin-bottom:14px}

/* ---------- APP SHELL ---------- */
.shell{display:flex;height:100vh;overflow:hidden}
.side{width:250px;flex-shrink:0;background:#232a24;color:#c9cdc4;display:flex;flex-direction:column}
.side .top{padding:18px 18px 14px;border-bottom:1px solid rgba(255,255,255,.08)}
.lines{padding:12px 12px 4px}
.lines .h,.nav .h{font-size:10px;font-weight:700;letter-spacing:.08em;color:#6f766c;padding:6px 4px 8px}
.lines .grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.lbtn{display:flex;align-items:center;gap:7px;padding:9px 10px;border:none;border-radius:8px;cursor:pointer;font-size:12px;font-weight:600;color:#c9cdc4;background:rgba(255,255,255,.05)}
.lbtn .dot{width:8px;height:8px;border-radius:50%}
.nav{flex:1;padding:10px 12px;overflow-y:auto}
.nbtn{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:10px 12px;border:none;border-radius:8px;cursor:pointer;font-size:13.5px;font-weight:500;color:#c9cdc4;background:transparent}
.nbtn:hover{background:rgba(255,255,255,.06)}
.nbtn.active{background:rgba(255,255,255,.08);color:#fff;font-weight:600}
.nbtn .dot{width:7px;height:7px;border-radius:2px;background:#5a615a}
.nbtn.active .dot{background:currentColor}
.nbtn .cnt{margin-left:auto;font-size:11px;opacity:.6}
.side .foot{padding:12px 16px;border-top:1px solid rgba(255,255,255,.08);font-size:11px;color:#8b9187}
.side .foot .u{color:#c9cdc4;font-weight:600}
.side .foot a{color:#8b9187;cursor:pointer;display:inline-block;margin-top:6px}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.hdr{min-height:64px;flex-shrink:0;background:#fff;border-bottom:1px solid #e5e1d8;display:flex;align-items:center;flex-wrap:wrap;padding:10px 24px;gap:10px 16px}
.hdr .bar{width:5px;height:34px;border-radius:3px;background:#3d7a4e;flex-shrink:0}
.hdr>div:nth-child(2){flex:1;min-width:150px;overflow:hidden}
.hdr h2{font-size:16px;margin:0;line-height:1.1;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
.hdr .sub{font-size:12px;color:#8a8478;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
.hdr .ctrls{margin-left:auto;display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
.hdr .ctrls .lbl{margin-bottom:3px}
.hdr .ctrls input,.hdr .ctrls select{padding:6px 9px;border:1px solid #d8d4cc;border-radius:7px;font-size:13px;background:#fff}
.content{flex:1;overflow-y:auto;padding:24px}
.wrap{max-width:1080px;margin:0 auto}

/* cards / grids */
.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}
.card{background:#fff;border:1px solid #e5e1d8;border-radius:12px;padding:18px}
.card .k{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#a8a294}
.card .v{font-size:26px;font-weight:600;margin-top:8px}
.card .v small{font-size:13px;color:#a8a294;font-weight:400}
.card .hint{font-size:12px;color:#8a8478;margin-top:6px}
.two{display:grid;grid-template-columns:1.4fr 1fr;gap:16px}
.sec-title{font-size:14px;font-weight:700;margin:0 0 14px}
.bar-row{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.bar-row .nm{width:140px;font-size:12.5px;color:#4a463e;flex-shrink:0}
.bar-row .tr{flex:1;height:22px;background:#f0ede6;border-radius:5px;overflow:hidden}
.bar-row .tr i{display:block;height:100%;border-radius:5px}
.bar-row .vl{width:90px;text-align:right;font-size:13px;flex-shrink:0}

/* forms */
.formsec{background:#fff;border:1px solid #e5e1d8;border-radius:12px;overflow:hidden;margin-bottom:18px}
.formsec > h3{background:#232a24;color:#fff;padding:11px 20px;font-size:13px;font-weight:700;letter-spacing:.03em;margin:0;display:flex;align-items:center}
.formsec .body{padding:20px}
.subh{font-size:12px;font-weight:700;color:#4a463e;margin:0 0 10px;padding-bottom:8px;border-bottom:1px solid #eee}
.grid{display:grid;gap:14px}
.fld input,.fld select,.fld textarea{width:100%;padding:9px 11px;border:1px solid #d8d4cc;border-radius:7px;font-size:14px;background:#fff}
.cell{padding:8px;border:1px solid #d8d4cc;border-radius:6px;font-size:13px;width:100%;background:#fff}
.rowtbl{display:grid;gap:8px;margin-bottom:8px;align-items:center}
.rowhd{font-size:10px;font-weight:600;text-transform:uppercase;color:#8a8478;margin-bottom:6px}
.xbtn{background:none;border:1px solid #eecdd3;color:#c47;border-radius:6px;cursor:pointer;font-size:15px;height:34px}
.addbtn{margin-left:auto;background:#3d7a4e;color:#fff;border:none;padding:5px 12px;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer}
.summary{display:grid;gap:12px;margin-top:20px;background:#faf9f5;border:1px solid #eee;border-radius:10px;padding:16px}
.summary .k{font-size:10.5px;font-weight:600;text-transform:uppercase;color:#a8a294}
.summary .v{font-size:19px;font-weight:600;margin-top:5px}
.chk-row{display:flex;align-items:center;gap:14px;padding:11px 0;border-bottom:1px solid #f0ede6}
.chk-row .it{flex:1;font-size:13.5px}
.chk-row label{font-size:12.5px;display:flex;align-items:center;gap:5px;cursor:pointer}
.actions{display:flex;justify-content:flex-end;gap:10px;padding-bottom:20px}

/* tables */
.tbl{background:#fff;border:1px solid #e5e1d8;border-radius:12px;overflow:hidden}
.tbl .th,.tbl .tr2{display:grid;align-items:center;gap:0}
.tbl .th{background:#faf9f5;border-bottom:1px solid #e5e1d8;padding:12px 18px;font-size:11px;font-weight:600;text-transform:uppercase;color:#8a8478}
.tbl .tr2{padding:13px 18px;border-bottom:1px solid #f0ede6;font-size:13.5px;cursor:pointer}
.tbl .tr2:hover{background:#faf9f5}
.right{text-align:right}
.empty{padding:30px;text-align:center;font-size:13px;color:#a8a294}
.badge{font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px}

/* modal */
.modal{position:fixed;inset:0;background:rgba(35,42,36,.5);z-index:50;display:flex;justify-content:center;align-items:flex-start;padding:32px;overflow-y:auto}
.modal .box{background:#f6f4ef;border-radius:14px;width:100%;max-width:900px;overflow:hidden;box-shadow:0 24px 60px rgba(0,0,0,.3)}
.modal .mh{background:#232a24;color:#fff;padding:18px 24px;display:flex;align-items:center;gap:14px}
.modal .mb{padding:22px 24px;max-height:72vh;overflow-y:auto}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:#232a24;color:#fff;padding:12px 20px;border-radius:10px;font-size:14px;z-index:80;box-shadow:0 10px 30px rgba(0,0,0,.25)}

/* usuarios y roles */
.note{background:#f4f7f4;border-left:3px solid #3d7a4e;border-radius:0 8px 8px 0;padding:12px 16px;margin-bottom:18px;font-size:13px;color:#4a463e}
.chkgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.chkrow{display:flex;align-items:flex-start;gap:9px;padding:10px 12px;border:1px solid #e5e1d8;border-radius:9px;cursor:pointer;font-size:13px}
.chkrow input{margin-top:2px;width:16px;height:16px;accent-color:#3d7a4e}
.chkrow i{font-style:normal;font-size:11.5px;color:#8a8478}
.chiprow{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:6px}
.chip2{display:flex;align-items:center;gap:7px;padding:7px 12px;border:1px solid #e5e1d8;border-radius:20px;cursor:pointer;font-size:13px}
.chip2 input{width:15px;height:15px;accent-color:#2a6f97}
.ulist{display:flex;flex-direction:column;gap:14px}
.ucard{background:#fff;border:1px solid #e5e1d8;border-radius:12px;padding:18px}
.uhead{display:flex;align-items:center;gap:13px;margin-bottom:14px}
.uav{width:42px;height:42px;border-radius:50%;background:#3d7a4e;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex-shrink:0}
.uinfo{min-width:0}.uinfo b{font-size:15px;color:#2a2722}.uinfo span{display:block;font-size:12.5px;color:#8a8478}
.ubadge{font-size:11px;font-weight:600;padding:3px 10px;border-radius:20px}
.ubadge.on{background:#e4f0e6;color:#2f6d3c}.ubadge.off{background:#f0eeea;color:#8a8478}
.uacts{margin-left:auto;display:flex;gap:7px;align-items:center}
.uacts button{background:#fff;border:1px solid #d8d4cc;color:#4a463e;padding:6px 12px;border-radius:7px;font-size:12px;font-weight:600;cursor:pointer}
.uacts button:hover{background:#faf9f5}.uacts .xbtn:hover{background:#faeef0}
.ulbl{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#a8a294;margin:0 0 7px}
.rolchip,.linchip{padding:5px 11px;border-radius:20px;font-size:12px;font-weight:600;cursor:pointer;border:1px solid #d8d4cc;background:#fff;color:#8a8478}
.rolchip.on{border-color:#3d7a4e;background:#e4f0e6;color:#2f6d3c}
.linchip.on{border-color:#2a6f97;background:#e6f0f6;color:#2a6f97}
.mailbox{border:1px solid #e5e1d8;border-radius:11px;padding:16px;line-height:1.7;font-size:13.5px}
.creds{background:#f4f7f4;border-radius:9px;padding:12px 14px;margin-top:8px}
.minf{background:#faf9f5;border-radius:9px;padding:12px 14px}
.okmsg{margin-top:12px;padding:10px 12px;border-radius:8px;font-size:12.5px;background:#eef1ec;color:#3d5a41}
.err{margin-top:12px;padding:10px 12px;border-radius:8px;font-size:12.5px;background:#faeef0;color:#a03050}

@media(max-width:820px){
  .side{position:fixed;z-index:40;height:100%;transform:translateX(-100%);transition:.2s}
  .side.open{transform:none}
  .kpis{grid-template-columns:1fr 1fr}
  .two{grid-template-columns:1fr}
  .content{padding:16px}
}
