:root{--bg:#eef1f6;--card:#fff;--line:#e3e8f0;--text:#1f2329;--muted:#8a929e;--brand:#2563eb;--danger:#e5484d;--ok:#22b573;--warn:#f59e0b;--sidebar:#161a1f}*{box-sizing:border-box;margin:0;padding:0}html,body,#app{height:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,Segoe UI,sans-serif;font-size:14px}.admin-shell{display:flex;height:100%}.sidebar{width:220px;background:linear-gradient(180deg,#161a1f,#1b222c);color:#c3cad4;display:flex;flex-direction:column;flex-shrink:0}.sidebar .brand{padding:20px 18px 14px;border-bottom:1px solid #2a323d}.sidebar .brand b{font-size:18px;color:#fff;letter-spacing:1px}.sidebar .brand span{display:block;font-size:12px;color:#7d8794;margin-top:4px}.nav{flex:1;overflow-y:auto;padding:10px 8px}.nav .nav-item{display:flex;align-items:center;gap:8px;padding:10px 12px;margin-bottom:2px;border-radius:8px;color:#b6bfcb;cursor:pointer;font-size:14px;margin-left:3px}.nav .nav-item:hover{background:#232b37;color:#fff}.nav .nav-item.active{background:#2563eb;color:#fff}.nav .nav-item .ico{width:18px;text-align:center}.sidebar .side-foot{padding:12px 18px;font-size:11px;color:#5d6670;border-top:1px solid #2a323d}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{height:56px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 22px;flex-shrink:0}.topbar .t-title{font-size:17px;font-weight:700}.topbar .t-user{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px}.content{flex:1;overflow-y:auto;padding:20px 22px}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:18px;margin-bottom:16px}.card h3{font-size:15px;margin-bottom:14px}.tbl-wrap{background:#fff;border:1px solid var(--line);border-radius:10px;overflow-x:auto}table.data{width:100%;border-collapse:collapse}table.data th{text-align:left;background:#f7f8fb;color:#5d6670;font-weight:600;font-size:12.5px;padding:10px 12px;border-bottom:1px solid var(--line);white-space:nowrap}table.data td{padding:10px 12px;border-bottom:1px solid #f2f3f5;font-size:13px;vertical-align:middle}table.data tr:last-child td{border-bottom:none}table.data tr:hover td{background:#f9fbff}button{border:none;border-radius:8px;padding:8px 16px;cursor:pointer;font-size:13px;background:#f0f3f8;color:var(--text);transition:opacity .15s}button:hover{opacity:.88}button.primary{background:linear-gradient(135deg,#2563eb,#4f46e5);color:#fff}button.danger{background:#fdeaea;color:var(--danger);border:1px solid #f3c1c2}button.ghost{background:#fff;border:1px solid var(--line);color:#5d6670}button.mini{padding:4px 10px;font-size:12px;border-radius:6px}button:disabled{opacity:.5;cursor:not-allowed}input[type=text],input[type=number],input[type=date],input[type=password],select,textarea{border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:13px;background:#fff;color:var(--text);outline:none}input:focus,select:focus,textarea:focus{border-color:var(--brand)}textarea{resize:vertical;line-height:1.6}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;background:#eef2ff;color:#3b5bdb}.badge.ok{background:#e7f8ef;color:#15803d}.badge.gold{background:#fff7e0;color:#b8860b;border:1px solid #f2dca0}.badge.warn{background:#fff4e0;color:#b45309}.badge.danger{background:#fdecea;color:#dc2626}.badge.muted{background:#f0f3f8;color:#64748b}.filter-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:14px}.filter-bar .f{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.filter-bar .f label{color:#8a929e}.pager{display:flex;align-items:center;gap:10px;margin-top:14px;justify-content:flex-end;color:var(--muted);font-size:13px}.login-wrap{height:100%;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 20%,#1f2a3d,#0e1116 70%)}.login-card{width:360px;background:#ffffff0f;border:1px solid rgba(255,255,255,.12);border-radius:16px;padding:34px 30px}.login-card .lb{font-size:22px;font-weight:800;color:#fff;text-align:center;letter-spacing:2px}.login-card .ls{color:#8a94a3;font-size:12px;text-align:center;margin:8px 0 26px}.login-card .fn{margin-bottom:14px}.login-card input{width:100%;background:#ffffff12;border:1px solid rgba(255,255,255,.16);color:#fff;padding:12px 14px;border-radius:10px;font-size:14px}.login-card .err{color:#ffb4ab;font-size:12px;min-height:18px;margin-bottom:8px;text-align:center}.login-card button.primary{width:100%;padding:12px;font-size:15px;border-radius:10px}.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin-bottom:16px}.kpi{background:#fff;border:1px solid var(--line);border-radius:12px;padding:16px}.kpi .k-label{color:var(--muted);font-size:12px}.kpi .k-num{font-size:26px;font-weight:800;margin-top:6px}.kpi .k-sub{color:var(--muted);font-size:12px;margin-top:4px}.zone-title{font-size:15px;font-weight:700;margin:18px 0 10px}.mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0e1280;display:flex;align-items:center;justify-content:center;z-index:50}.dialog{background:#fff;border-radius:14px;width:560px;max-width:94vw;max-height:88vh;overflow-y:auto;padding:22px}.dialog h3{font-size:16px;margin-bottom:14px}.dialog .dn{margin-bottom:12px;display:flex;flex-direction:column;gap:6px}.dialog .dn label{font-size:12px;color:var(--muted)}.dialog .row{display:flex;gap:12px}.dialog .row>.dn{flex:1}.dialog .btns{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.mono{font-family:ui-monospace,Menlo,monospace;font-size:12px}pre.prompt{background:#0f172a;color:#dbeafe;border-radius:10px;padding:12px;white-space:pre-wrap;word-break:break-all;max-height:260px;overflow-y:auto;font-size:12px;line-height:1.6}.empty{color:var(--muted);text-align:center;padding:36px;font-size:13px}.num{font-variant-numeric:tabular-nums}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}@media (max-width:1100px){.grid2{grid-template-columns:1fr}}.legend-line{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-bottom:8px;flex-wrap:wrap}.legend-line .lg{display:inline-flex;align-items:center;gap:5px}.legend-line .lg i{width:10px;height:10px;border-radius:3px;display:inline-block}.axis-x{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-top:2px}.funnel{padding-top:4px}.funnel .frow{margin-bottom:7px}.funnel .fstep{position:relative;height:26px;background:#f4f6fa;border-radius:5px;overflow:hidden}.funnel .fbar{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#2563eb,#4f46e5);border-radius:5px;opacity:.85}.funnel .fl{position:absolute;left:0;right:0;top:0;bottom:0;display:flex;align-items:center;gap:8px;padding:0 10px;font-size:12.5px;color:#1f2329}.funnel .fl.warn b{color:var(--warn)}.funnel .fl b{font-weight:700}.funnel .fl em{font-size:11px;color:var(--muted);font-style:normal;margin-left:auto}.rfm-map{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}.rfm-cell{background:#f7f8fb;border:1px solid var(--line);border-radius:10px;padding:12px}.rfm-cell .rfm-name{font-size:12px;color:var(--muted)}.rfm-cell .rfm-num{font-size:22px;font-weight:800;margin-top:2px}.rfm-cell .rfm-tip{font-size:11px;color:var(--danger);margin-top:2px}.rfm-legend{border-top:1px solid var(--line);padding-top:10px}.rfm-legend .lst-title{font-size:12.5px;font-weight:700;margin-bottom:6px}.rfm-legend .lst-row{display:flex;justify-content:space-between;font-size:12.5px;padding:3px 0;color:#4a515c}.rfm-legend .lst-row em{font-style:normal;font-weight:700;color:#15803d}.rfm-legend .lst-row em.danger{color:var(--danger)}.alert-row{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-bottom:1px solid #f2f3f5}.alert-row:last-child{border-bottom:none}.alert-row b{font-size:13.5px}.alert-detail{color:var(--muted);font-size:12px;margin-top:3px}.k-num.ok{color:#15803d}.k-num.warn{color:var(--danger)}
