:root{--bg:#0f172a;--bg-elev:#020617;--surface:#1e293b;--muted:#334155;--text:#f1f5f9;--text-sec:#cbd5e1;--text-mut:#94a3b8;--accent:#38bdf8;--accent-2:#a78bfa;--accent-3:#f472b6;--good:#34d399;--warn:#fbbf24;--bad:#f87171;--border:#94a3b81f;--font:"Inter", "Segoe UI", Arial, sans-serif;--sidebar-w:240px}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:14px;line-height:1.5}a{color:inherit;text-decoration:none}.shell{min-height:100vh;display:flex}.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:var(--bg-elev);border-right:1px solid var(--border);height:100vh;padding:22px 14px;position:sticky;top:0;overflow-y:auto}.sidebar .brand{letter-spacing:-.02em;padding:0 8px 18px;font-size:16px;font-weight:700}.sidebar .brand .accent{color:var(--accent)}.sidebar .navgroup{margin-top:16px}.sidebar .navgroup .gtitle{text-transform:uppercase;letter-spacing:.08em;color:var(--text-mut);padding:0 8px 6px;font-size:10.5px}.sidebar a.navitem{color:var(--text-sec);border-radius:8px;padding:8px 10px;font-size:13px;transition:background .12s,color .12s;display:block}.sidebar a.navitem:hover{color:var(--text);background:#38bdf80f}.sidebar a.navitem.active{color:var(--accent);background:#38bdf824;font-weight:600}.sidebar a.navitem.disabled{opacity:.4;pointer-events:none}.content{flex-direction:column;flex:auto;min-width:0;display:flex}.topbar{border-bottom:1px solid var(--border);background:linear-gradient(180deg, var(--bg-elev), var(--bg));justify-content:space-between;align-items:center;padding:16px 32px;display:flex}.topbar .meta{color:var(--text-sec);flex-wrap:wrap;gap:18px;font-size:12px;display:flex}.topbar .meta strong{color:var(--accent);font-weight:600}.topbar .user{color:var(--text-mut);align-items:center;gap:12px;font-size:12px;display:flex}.btn{background:var(--surface);color:var(--text-sec);border:1px solid var(--border);cursor:pointer;border-radius:8px;padding:7px 14px;font-family:inherit;font-size:13px;transition:border-color .12s,color .12s}.btn:hover{color:var(--text);border-color:#38bdf866}.btn.primary{background:var(--accent);color:#04222f;border-color:var(--accent);font-weight:600}.btn.primary:hover{filter:brightness(1.08)}.btn:disabled{opacity:.55;cursor:default}main.page{width:100%;max-width:1600px;margin:0 auto;padding:24px 32px 60px}h1.page-title{letter-spacing:-.02em;font-size:24px;font-weight:700}h1.page-title .accent{color:var(--accent)}.page-sub{color:var(--text-mut);margin-top:4px;font-size:13px}h2.section{letter-spacing:-.01em;align-items:center;gap:10px;margin:34px 0 14px;font-size:18px;font-weight:600;display:flex}h2.section:before{content:"";background:var(--accent);border-radius:2px;width:4px;height:18px}.kpis{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;display:grid}.kpi{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 20px;transition:transform .15s,border-color .15s}.kpi:hover{border-color:#38bdf84d;transform:translateY(-2px)}.kpi .label{text-transform:uppercase;letter-spacing:.08em;color:var(--text-mut);font-size:11px}.kpi .value{color:var(--text);margin-top:6px;font-size:26px;font-weight:700}.kpi .sub{color:var(--text-sec);margin-top:4px;font-size:11px}.kpi.accent .value{color:var(--accent)}.kpi.good .value{color:var(--good)}.kpi.warn .value{color:var(--warn)}.grid{gap:16px;display:grid}.grid-2{grid-template-columns:repeat(auto-fit,minmax(min(100%,560px),1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr))}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:18px 20px;overflow:hidden}.card h3{color:var(--text);margin-bottom:4px;font-size:14px;font-weight:600}.card .card-sub{color:var(--text-mut);margin-bottom:12px;font-size:11px}.chart{width:100%;height:340px}.chart-small{width:100%;height:260px}.scroll-y{overflow-y:auto}table.t{border-collapse:collapse;width:100%;font-size:12.5px}table.t thead th{text-align:left;color:var(--text-mut);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border);background:var(--surface);padding:8px 10px;font-size:10.5px;font-weight:600;position:sticky;top:0}table.t tbody td{color:var(--text-sec);border-bottom:1px solid #94a3b80f;padding:8px 10px}table.t tbody tr:hover td{color:var(--text);background:#38bdf80a}table.t td.num,table.t th.num{text-align:right;font-variant-numeric:tabular-nums}table.t td.strong{color:var(--text);font-weight:500}code.slug{color:var(--text-mut);font-size:11px}.pill{border-radius:10px;padding:2px 8px;font-size:10.5px;font-weight:500;display:inline-block}.pill.ballena{color:#7dd3fc;background:#38bdf82e}.pill.leal{color:#6ee7b7;background:#34d3992e}.pill.reciente{color:#c4b5fd;background:#a78bfa2e}.pill.riesgo{color:#fcd34d;background:#fbbf242e}.pill.perdido{color:#cbd5e1;background:#94a3b82e}.pill.ocasional{color:#f9a8d4;background:#f472b61f}.alert{border-left:3px solid var(--warn);color:var(--text-sec);background:#fbbf2414;border-radius:6px;margin-bottom:16px;padding:12px 16px;font-size:13px}.alert strong{color:var(--warn)}.unavailable{color:var(--text-mut);background:#94a3b80f;border-radius:8px;padding:18px;font-size:12.5px}.login-wrap{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;width:100%;max-width:380px;padding:36px 34px}.login-card h1{letter-spacing:-.02em;font-size:22px;font-weight:700}.login-card h1 .accent{color:var(--accent)}.login-card p.sub{color:var(--text-mut);margin:6px 0 24px;font-size:12.5px}.field{margin-bottom:16px}.field label{text-transform:uppercase;letter-spacing:.06em;color:var(--text-mut);margin-bottom:6px;font-size:11px;display:block}.field input{background:var(--bg);border:1px solid var(--muted);width:100%;color:var(--text);border-radius:8px;padding:10px 12px;font-family:inherit;font-size:14px}.field input:focus{border-color:var(--accent);outline:none}.login-error{color:var(--bad);margin-bottom:14px;font-size:12.5px}.center-state{min-height:60vh;color:var(--text-mut);justify-content:center;align-items:center;font-size:14px;display:flex}.spinner{border:3px solid var(--muted);border-top-color:var(--accent);border-radius:50%;width:22px;height:22px;margin-right:12px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@media (width<=860px){.sidebar{display:none}main.page{padding:18px}.topbar{padding:14px 18px}}
