:root{--bg:#07101f;--side:#060d19;--card:#0d192b;--card2:#101f34;--line:#1c2b42;--text:#edf4ff;--muted:#8fa1b8;--accent:#35d08a;--accent2:#43a6ff;--warn:#ffb84d;--danger:#ff6373}*{box-sizing:border-box}body{margin:0;font-family:Inter,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--text)}button,input,select{font:inherit}.hidden{display:none!important}.login-shell{min-height:100vh;display:grid;place-items:center;background:radial-gradient(circle at 50% 20%,#12365b 0,#07101f 42%,#050b15 100%)}.login-card{width:min(420px,92vw);padding:42px;background:rgba(13,25,43,.96);border:1px solid #20334f;border-radius:22px;box-shadow:0 30px 90px #0008}.brand-mark{width:52px;height:52px;display:grid;place-items:center;border-radius:15px;background:linear-gradient(135deg,var(--accent),#1ba8db);font-size:26px;font-weight:900;color:#04120d}.login-card h1{margin:18px 0 5px;font-size:30px}.login-card p{color:var(--muted);margin:0 0 28px}.login-card label{display:block;color:#b8c5d6;font-size:13px;margin:16px 0}.login-card input,.filters input,.filters select{width:100%;margin-top:7px;padding:12px 14px;border:1px solid #263b58;border-radius:10px;background:#091426;color:var(--text);outline:none}.login-card input:focus,.filters input:focus,.filters select:focus{border-color:var(--accent)}button{border:0;border-radius:10px;padding:11px 16px;background:var(--accent);font-weight:700;color:#04120d;cursor:pointer}.login-card button{width:100%;margin-top:8px}.error{color:#ff8a96;font-size:13px;margin-top:14px;min-height:18px}.app{min-height:100vh;display:grid;grid-template-columns:245px 1fr}aside{position:fixed;inset:0 auto 0 0;width:245px;background:var(--side);border-right:1px solid #132139;padding:24px 15px;display:flex;flex-direction:column}.brand{display:flex;align-items:center;gap:12px;padding:0 8px 28px}.brand b{font-size:19px}.brand small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.brand-mark.small{width:38px;height:38px;border-radius:11px;font-size:19px}nav{display:grid;gap:7px}nav a{display:flex;align-items:center;gap:12px;padding:12px 13px;border-radius:10px;color:#aebed1;text-decoration:none;cursor:pointer;font-size:14px}nav a.active{background:#12263a;color:#fff;border-left:3px solid var(--accent)}nav a.disabled{opacity:.48;cursor:default}nav em{margin-left:auto;font-size:9px;font-style:normal;background:#16273c;padding:3px 6px;border-radius:10px}.aside-foot{margin-top:auto;border-top:1px solid #16253a;padding:18px 10px}.aside-foot small{display:block;color:var(--muted);margin-bottom:5px}.aside-foot b{font-size:13px}main{grid-column:2;min-width:0}header{height:82px;border-bottom:1px solid #16253a;display:flex;align-items:center;justify-content:space-between;padding:0 30px;position:sticky;top:0;background:#07101ff2;backdrop-filter:blur(10px);z-index:5}header h2{margin:0;font-size:18px}header p{margin:4px 0 0;color:var(--muted);font-size:12px}.user{display:flex;align-items:center;gap:12px;text-align:right}.user small{display:block;color:var(--muted);font-size:11px}.user>span{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:#244b76}.user button{padding:8px;background:transparent;color:var(--muted);font-size:18px}.view{padding:28px 30px 45px;max-width:1600px;margin:auto}.welcome{padding:28px 30px;border:1px solid #1a3049;border-radius:18px;background:linear-gradient(110deg,#0c1d31,#0c1829 60%,#0b2530);display:flex;justify-content:space-between;align-items:center}.welcome small{color:var(--accent);font-weight:800;letter-spacing:1.2px}.welcome h1{font-size:32px;margin:6px 0}.welcome p{color:var(--muted);margin:0}.live{color:#b9c9da;font-size:13px}.live i{display:inline-block;width:8px;height:8px;background:var(--accent);border-radius:50%;margin-right:7px}.kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin:18px 0}.kpi{padding:19px;background:var(--card);border:1px solid var(--line);border-radius:15px}.kpi .top{display:flex;justify-content:space-between;color:var(--muted);font-size:12px}.kpi .icon{font-size:18px}.kpi strong{display:block;font-size:27px;margin:12px 0 4px}.kpi small{color:var(--muted)}.kpi.danger strong{color:#ff7c88}.kpi.accent strong{color:var(--accent)}.grid{display:grid;grid-template-columns:2fr 1fr;gap:16px}.panel{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:20px;min-width:0}.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.panel h3{margin:0;font-size:15px}.panel-head p{margin:5px 0 0;color:var(--muted);font-size:11px}.link,.secondary,.ghost{background:transparent;color:var(--accent);border:1px solid #27405d}.secondary{background:#102238}.ghost{color:#9eb0c6}table{width:100%;border-collapse:collapse;font-size:12px}th{text-align:left;color:#8195ae;font-weight:600;padding:10px;border-bottom:1px solid #203149;white-space:nowrap}td{padding:11px 10px;border-bottom:1px solid #15263a;color:#dce7f5;white-space:nowrap}tr:hover td{background:#0f2034}.table-wrap{overflow:auto}.badge{display:inline-block;padding:4px 8px;border-radius:20px;background:#12372d;color:#61e5a9;font-size:10px}.badge.late{background:#3a1c26;color:#ff8c99}.bars{display:grid;gap:14px;padding-top:6px}.bar-row{display:grid;grid-template-columns:55px 1fr 34px;gap:8px;align-items:center;font-size:11px}.track{height:8px;background:#14263a;border-radius:10px;overflow:hidden}.fill{height:100%;background:linear-gradient(90deg,var(--accent2),var(--accent));border-radius:10px}.module-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.module-head h1{margin:0 0 5px;font-size:25px}.module-head p{margin:0;color:var(--muted);font-size:13px}.kpis.compact{margin-top:0}.filters{display:grid;grid-template-columns:repeat(6,minmax(120px,1fr)) auto auto;gap:9px;margin-bottom:18px}.filters input,.filters select{margin:0;padding:9px 10px;font-size:12px}.filters button{padding:9px 12px}.pager{display:flex;justify-content:flex-end;align-items:center;gap:12px;padding-top:16px;color:var(--muted);font-size:12px}.empty,.loading{padding:35px;text-align:center;color:var(--muted)}@media(max-width:1050px){.app{grid-template-columns:78px 1fr}aside{width:78px}.brand div,nav span,nav em,.aside-foot{display:none}.brand{padding-left:4px}nav a{justify-content:center;font-size:18px}main{grid-column:2}.kpis{grid-template-columns:repeat(2,1fr)}.grid{grid-template-columns:1fr}.filters{grid-template-columns:repeat(3,1fr)}}@media(max-width:650px){.app{display:block}aside{display:none}main{grid-column:auto}header{padding:0 16px}.view{padding:18px 14px}.kpis{grid-template-columns:1fr 1fr}.welcome{padding:20px}.live{display:none}.filters{grid-template-columns:1fr 1fr}.user div{display:none}}
/* v0.7: tema claro, autocompletado y ordenamiento */
body.light{--bg:#f4f7fb;--side:#ffffff;--card:#ffffff;--card2:#f7f9fc;--line:#dbe3ed;--text:#172033;--muted:#66758a;--accent:#16a66a;--accent2:#2478d4;--warn:#b96a00;--danger:#d94152}body.light .login-shell{background:radial-gradient(circle at 50% 20%,#dbeeff 0,#f4f7fb 48%,#edf2f7 100%)}body.light .login-card{background:#fff;border-color:#d8e2ed;box-shadow:0 25px 70px #63758a25}body.light aside{border-color:#dbe3ed}body.light header{background:#f4f7fbef;border-color:#dbe3ed}body.light nav a{color:#52647a}body.light nav a.active{background:#e9f5f0;color:#172033}body.light .login-card input,body.light .filters input,body.light .filters select{background:#fff;color:#172033;border-color:#ccd7e4}body.light td{color:#263449;border-color:#e6ebf1}body.light tr:hover td{background:#f5f8fb}body.light .ghost,body.light .secondary{color:#3d5875;border-color:#c7d4e2}body.light .badge{background:#dcf6ea;color:#087748}body.light .badge.late{background:#ffe2e5;color:#b92e40}.theme-toggle{background:transparent;color:var(--text);border:1px solid var(--line);padding:8px 10px;font-size:16px}.autocomplete{position:relative;min-width:0}.autocomplete>input:not([type=hidden]){margin:0!important}.suggestions{position:absolute;top:calc(100% + 5px);left:0;right:0;z-index:30;background:var(--card2);border:1px solid var(--line);border-radius:10px;box-shadow:0 15px 35px #0004;max-height:280px;overflow:auto}.suggestion{padding:10px 12px;cursor:pointer;border-bottom:1px solid var(--line);font-size:12px}.suggestion:last-child{border-bottom:0}.suggestion:hover{background:color-mix(in srgb,var(--accent) 12%,var(--card2))}.suggestion b{display:block;color:var(--text)}.suggestion small{color:var(--muted)}th.sortable{cursor:pointer;user-select:none}th.sortable:hover{color:var(--text)}th.sortable .sort{margin-left:5px;color:var(--accent)}

/* v0.8: contraste correcto del banner en tema claro */
body.light .welcome{background:linear-gradient(110deg,#e9f7f1,#edf5fb 60%,#e8f6f2);border-color:#cfe1df}
body.light .welcome h1{color:#172033}
body.light .welcome p,body.light .live{color:#52647a}
/* v1.1: columnas personalizables */
.column-panel{margin:-6px 0 18px auto;max-width:460px;padding:15px;background:var(--card2);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 45px #0004}.column-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.column-panel-head small{display:block;color:var(--muted);font-size:11px;margin-top:3px}.column-panel-head button{padding:4px 10px;font-size:18px}.column-list{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:12px}.column-item{display:flex;align-items:center;gap:8px;padding:9px;border:1px solid var(--line);border-radius:9px;background:var(--card);cursor:grab}.column-item.dragging{opacity:.45}.column-item .drag{color:var(--muted)}.column-item label{font-size:12px;cursor:pointer;flex:1}.column-item input{width:auto;margin:0 6px 0 0}.filters{grid-template-columns:repeat(6,minmax(115px,1fr)) auto auto auto}.bar-row{grid-template-columns:minmax(55px,90px) 1fr 55px}.bar-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:1050px){.column-list{grid-template-columns:1fr}.filters{grid-template-columns:repeat(3,1fr)}}

.badge.situation{font-weight:700}.badge.situation.facturado{background:#12372d;color:#61e5a9}.badge.situation.pendiente{background:#3b3015;color:#ffd36a}.badge.situation.atrasado{background:#3a1c26;color:#ff8c99}body.light .badge.situation.facturado{background:#dcf6ea;color:#087748}body.light .badge.situation.pendiente{background:#fff0c9;color:#8a5b00}body.light .badge.situation.atrasado{background:#ffe2e5;color:#b92e40}
